我正在研究iOS类初始化中的类初始化。
当我阅读以下代码时,我对Swift初始化规则感到有些困惑。 这是代码:
struct Sale {
var month:String
var value:Double
}
class DataGenerator {
//Where is the initialization ?
static var randomizedSale: Double {
return Double(arc4random_uniform(10000) + 1) / 10
}
static func data() -> [Sale] {
let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
var sales = [Sale]()
for month in months {
let sale = Sale(month: month, value: randomizedSale)
sales.append(sale)
}
return sales
}
我的问题是DataGenerator
类中的初始化在哪里?
我在想的是,变量randomizedSale
实际上已经将默认值作为括号中的实现。因此,此类中不需要初始化方法。
提前致谢。
答案 0 :(得分:1)
直接回答您的问题:无需初始化方法。
变量randomizedSale
是静态的,因此您不需要实例来使用它。它与初始化无关。
由于您的所有变量和函数都是静态的,因此您不需要编写init方法。如果创建类似:
class A {
var x: Int
}
您将收到错误,因为您的变量x
不是可选的,并且您没有提供任何值,因此您必须编写init或设置初始值。
class A {
var x: Int // Write init or set a value here
init() {
x = 0
}
}
答案 1 :(得分:1)
DataGenerator
类只有静态成员。必须始终为静态成员提供初始值(隐式或显式)。
没有实例变量的类不需要初始化。
答案 2 :(得分:-2)
你在这里思考正确的方向。所以基本上,如果DataGenerator
的所有属性都有默认值,Swift可以为其提供init()
的默认初始值。所以DataGenerator确实有一个init
,你根本不需要写它:)