Swift 中的多个初始化器
Posted
技术标签:
【中文标题】Swift 中的多个初始化器【英文标题】:multiple initializers in Swift 【发布时间】:2018-07-03 18:18:37 【问题描述】: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)
【问题讨论】:
您的代码在复制并粘贴到 Xcode 9.4 Swift 游乐场时可以正常工作。 请注意,这样做的一种有趣方法是,将init(name: String, age: Int = -1)
传递给相同的方法并避免冗余。不过,这并没有回答你的问题。请参阅docs.swift.org/swift-book/LanguageGuide/Functions.html中的“默认参数值”部分
酷,我不知道交易是什么——我只是做了同样的事情。谢谢!
@Larme 是的,好点,会做的!
@MariaTeleki 不要使用 -1。将属性设为可选并将其设置为 nil。
【参考方案1】:
您可以传递更多具有默认值的参数,例如 gender: 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)
【讨论】:
这如何回答这个问题?【参考方案2】:你试过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)
【讨论】:
【参考方案3】: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 中的多个初始化器的主要内容,如果未能解决你的问题,请参考以下文章