以下代码有效:
class Test {
let api = "abc"
let apiParam = {
return ["api": api]
}()
}
但是当常量 api 移入 apiParam 属性时,我收到错误:“无法调用类型为 {} -> _ 且参数列表为 () 的闭包”
class Test {
let apiParam = {
let api = "abc"
return ["api": api]
}()
}
但是,用实际值替换常量将消除错误。
class Test {
let apiParam = {
return ["api": "abc"]
}()
}
最佳答案
这只是 Swift 以一种神秘的方式告诉你你没有向它提供足够的类型信息。通常它能够非常有效地推断类型,但有时会很困难,通常是在闭包周围。如果您显式定义 apiParam
的类型,错误将被消除。
class Test {
let apiParam:[String:String] = {
let api = "abc"
return ["api": api]
}()
}
尽管请注意,您的第一个示例无法编译 - 您将收到实例成员“api”无法在类型“Test”上使用
错误。这是因为 self
将引用该范围内的静态类,而不是实例 - 这意味着您无法访问 api
属性。
您需要将 apiParam
设置为惰性属性(以便在您第一次访问时创建它,这意味着 self
将引用到实例),或者使 api
静态,以便它在类级别可用。
关于swift - 带有闭包初始值设定项的存储属性不允许局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36970492/