我正试图绕过选项,让我说我有以下几个类:
class Contact {
var displayName:String
init(displayName:String) {
self.displayName = displayName
}
}
class Contacts {
func create(displayName:String) -> Contact {
return Contact(displayName: displayName)
}
}
正如您所看到的,Contact类有一个字段displayName,但初始化时该值可能为nil。
所以要初始化这个类我通常会这样做:
let contact = Contact(displayName: "Test Name")
但我希望能够做到这一点:
let contact = Contact()
或
let contact = Contacts().create()
答案 0 :(得分:3)
您可以将init参数设置为可选String?
,默认为
价值 nil
:
class Contact {
var displayName: String?
init(displayName: String? = nil) {
self.displayName = displayName
}
}
let contact1 = Contact()
let contact2 = Contact(displayName: "John")
同样适用于Contacts
类:
class Contacts {
func create(displayName: String? = nil) -> Contact {
return Contact(displayName: displayName)
}
}
let contacts = Contacts()
let contact3 = contacts.create()
let contact4 = contacts.create("Mary")
答案 1 :(得分:1)
如果您想使用可选的displayName
:
class Contact {
var displayName: String?
convenience init(displayName: String) {
self.init()
self.displayName = displayName
}
}
这允许你这样做:
let contact = Contact()
let otherContact = Contact(displayName: "Test Name")
编辑: 这也是创建功能:
class Contacts {
func create() -> Contact {
return Contact()
}
func create(displayName: String) -> Contact {
return Contact(displayName: displayName)
}
}
但我建议这样做:
class Contact {
var displayName: String?
init(displayName: String?) {
self.displayName = displayName
}
}
class Contacts {
func create(displayName: String?) -> Contact {
return Contact(displayName: displayName)
}
}
答案 2 :(得分:0)
使displayName属性可选,如下所示:
var displayName:String?
Optionals可以保持nil或实际值,在你的情况下是一个字符串。