type of Expression is ambiguous without more context.
即使我提供完整的类型信息,也会发生这种情况.
这是重现它的代码.
我有2个结构:
struct Person{ let name_ : String let address_ : Address}struct Address { let street_ : String let city_ : String}
然后我创建一个包含2个函数的结构来获取和设置Person的地址:
struct Lens<A,B> { let extract: (A)->B let create: (B,A) -> A}
当我尝试创建一个获取并设置地址的Lens实例时(在后面的例子中它返回一个带有新地址的新Person),我在第一个闭包中得到了错误.
let lens : Lens<Person,Address> =Lens( extract: {(p:Person)->Address in return p.address_},// here's the error create: {Person(let lens : Lens<Person,Address> = Lens( extract: {.name_,Address(street_: ,city_: .address_.city_))})struct Lens<A,B> { let extract: (A) -> B let create: (A,B) -> A // note,A & B swapped}.address_ },create: { Person(name_: .name_,address_: Address(street_:let lens : Lens<Person,create: { Person(name_:.street_,city_: .address_.city_)) })let lens : Lens<Person,address_: ) }).name_,address_: Address(street_: .street_,city_: .address_.city_)) })
不仅在镜头类型中指定了第一个闭包的参数类型,而且在闭包本身中也是如此.
这是怎么回事????
解决方法 虽然它表明错误在提取中,但它确实在创建中. 0美元和1美元是倒退的.你指的是$0.name_,但创建闭包的$0是B,地址,但name_是Person的属性.我想你的意思是:或者您可以重新定义镜头:
然后你可以这样做:
或者,也许你的意思是:
这样,创建使用所提供地址的街道和城市. (使用地址的街道对我来说没有意义,但不是城市.)
总结以上是内存溢出为你收集整理的Swift闭包中的“表达式类型不含更多上下文”错误全部内容,希望文章能够帮你解决Swift闭包中的“表达式类型不含更多上下文”错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)