为什么数组初始化在swift中引用常量成员变量?
问题描述:
我有一个数据结构,它是一个数据提供者,并且设置了一个值数组,并且我想要设置的一个特定值是来自实例成员的值。为什么数组初始化在swift中引用常量成员变量?
到框架它作为一个具体的例子,我得到一个错误,当我做
struct DataProvider {
let largeInt = 50000
let ints: [Int] = [2, 3, 4, largeInt]
}
编译器说
实例成员“largeInt”不能对数据类型“的DataProvider”
可以使用
有没有一种方法,我可以引入largeInt作为整数初始化的一部分,而不是实际上用字面值50000替换它?
答
原因已经被vacawama解释。而且你还可以使用静态
struct DataProvider {
static let largeInt = 50000
let ints: [Int] = [2, 3, 4, largeInt]
}
+0
是啊,这工作也是如此。 Upvoted。在这种情况下,'largeInt'就像结构外部的'DataProvider.largeInt'一样被访问。在OP最初的例子中,'largeInt'是一个实例变量,可以从一个实例中访问,例如'DataProvider()。largeInt'。 – vacawama
答
您定义它的方式的问题是,largeInt
不可用于读取,直到结构完成初始化,因此您不能在另一个属性的初始化中使用它。
相反,内联初始化它,你可以用一个初始化初始化:
struct DataProvider {
let largeInt: Int
let ints: [Int]
init() {
largeInt = 50000
ints = [2, 3, 4, largeInt]
}
}
或者你也可以通过largeInt
进入初始化:
struct DataProvider {
let largeInt: Int
let ints: [Int]
init(largeInt: Int) {
self.largeInt = largeInt
ints = [2, 3, 4, largeInt]
}
}
let dp = DataProvider(largeInt: 50000)
尝试specifing类型:'让largeInt:INT = 50000' –