Swift中的多个初始值设定项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift中的多个初始值设定项相关的知识,希望对你有一定的参考价值。

Error: play.playground:34:5: error: invalid redeclaration of 'init'

如何在Swift中为类创建多个初始值设定项?我想如果我为每个init提供不同的参数,那么每个init都会有不同的方法签名,我可以创建多个。为什么这不起作用,或者我在其他地方犯了错误? (下面是从操场上拉出来的。)

//make a class
class Human{
    var name: String
    var age: Int
    init(_ name: String){
        self.name = name
        self.age = -1
    } 
    init(name: String, age: Int){
        self.name = name
        self.age = age

    }
}

var newHuman = Human("bob")
print(newHuman.name)

var newHuman2 = Human(name: "Marmelade", age: 19)
print(newHuman2)
答案

您可以使用默认值传递更多参数,如性别:String =“”

init(name: String, age: Int = 0, gender: String = ""){
    self.name = name
    self.age = age

}

var newHuman = Human("bob")
print(newHuman.name)

var newHuman2 = Human(name: "lol", age: 0)
print(newHuman2)

var newHuman3 = Human(name: "lol", age: 3, gender: "Male")
print(newHuman2)
另一答案

你试过convenience关键字吗?

//make a class
class Human{
    var name: String
    var age: Int
    convenience init(_ name: String){
        self.init(name: name, age: -1)
    }
    init(name: String, age: Int){
        self.name = name
        self.age = age

    }
}

var newHuman = Human("bob")
print(newHuman.name)

var newHuman2 = Human(name: "Marmelade", age: 19)
print(newHuman2)
另一答案
class Your_ViewController : UIViewController {

    var yourFirstProperty : String?
    var yourSecondProperty : String?

    init(yourFirstProperty: String) {
        self.yourFirstProperty = yourFirstProperty
        self.yourSecondProperty = nil
        super.init(nibName: nil, bundle: nil)
    }

    init(yourSecondProperty: String) {
        self.yourSecondProperty = yourSecondProperty
        self.yourFirstProperty = nil
        super.init(nibName: nil, bundle: nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) is not supported")
    }
}

您可以轻松地为视图控制器创建多个初始化器。我已经编写了一个可以通过两种方式初始化的视图控制器

这适用于使用纯代码制作UI的程序员

以上是关于Swift中的多个初始值设定项的主要内容,如果未能解决你的问题,请参考以下文章

如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?

是否有任何特定原因不能将函数调用用于C中的变量初始值设定项

gba 中的初始值设定项无效

'#selector'的参数不是指'@objc'方法,属性或初始值设定项

属性“dataProvider”有多个初始值设定项。(注意:“dataProvider”是“mx.charts.BarChart”的默认属性)。

您只能在 C# 中的固定语句初始值设定项错误中获取未固定表达式的地址