swift - Swift 如何有多个 init()

标签 swift init

是否有可能,如果是的话,如何在这样的类中有多个不带参数的初始化(字符串只是一个例子):

aVar: String

init() {
   aVar = "simple init"
}

initWithAGoodVar() {
   aVar = "Good Var!"
}

initWithFooBar() {
   aVar = "Foo Bar"
}

最佳答案

你不能有多个没有参数的 init,因为你想使用哪个 init 方法是不明确的。作为替代方案,您可以将初始值传递给 init 方法。以您的问题为例:

class MyClass {
    var myString: String

    init(myString: String) {
        self.myString = myString
    }
}

let a = MyClass(myString: "simple init")

或者,如果 myString 只是某些值,您可以使用 enum:

class MyOtherClass {
    enum MyEnum: String {
        case Simple  = "Simple"
        case GoodVar = "GoodVar"
        case FooBar  = "FooBar"
    }

    var myString: String

    init(arg: MyEnum) {
        myString = arg.rawValue
    }
}

let b = MyOtherClass(arg: .GoodVar)
println(b.myString) // "GoodVar"

关于swift - Swift 如何有多个 init(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30550640/

相关文章:

python - 如何在 python 类中使用 *args?

swift - Swift 中如何检查返回的对象是否是 UIView

ios - 从 archiveRootObject 迁移到 archivedData

ios - 我觉得我重复代码太多了

linux - 将 init 转换为 systemd

python - 将实例属性从一个模块移动到另一个模块

cocoa - 使用 socket 连接两个自定义控件

ios - 如何删除空 UITextView 上的空白文本容器

java - ColdFusion 初始化需要外部配置文件的 Java 对象方法

iphone - 当我初始化自定义单元格时返回 'self' 而它没有设置为 '[(super or self) init...]' 的结果