我在我的Swift代码中遇到了一个奇怪的类型相关错误:
表达式的类型在没有更多上下文的情况下是不明确的。
即使我提供了完整的类型信息,这种情况仍会发生。
以下是重现此错误的代码。
我有两个结构体:
struct Person{
let name_ : String
let address_ : Address
}
struct Address {
let street_ : String
let city_ : String
}
然后我创建了一个结构体,其中包含两个函数,用于获取和设置一个人的地址
:
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($0.name_,
Address(street_: $1, city_: $0.address_.city_))})
不仅第一个闭包的参数类型在镜头类型中被指定,而且在闭包本身中也被指定。
发生了什么???
Person(name_: ..., address_: ...)
),而且street_:$1
没有意义,因为$1
不是字符串。 - Martin R