Sam*_*her 2 initialization properties ios swift swift3
假设我有一个struct像这样的Swift 设置:
struct User {
// Properties
var name: String?
var username: String!
var email: String?
}
Run Code Online (Sandbox Code Playgroud)
现在,我看待它的方式,有两种设计初始化程序的方法.
这是第一个:
init(username: String) {
self.username = username
}
init(username: String, name: String) {
self.username = username
self.name = name
}
init(username: String, name: String, email: String) {
self.username = username
self.name = name
self.email = email
}
Run Code Online (Sandbox Code Playgroud)
这是第二个:
init(username: String) {
self.username = username
}
init(username: String, name: String) {
self.init(username: username)
self.name = name
}
init(username: String, name: String, email: String) {
self.init(username: username, name: name)
self.email = email
}
Run Code Online (Sandbox Code Playgroud)
哪种更好的做法,甚至有所作为?
vad*_*ian 10
实际上你只需要一个初始化器.
username 似乎是必需的,所以声明它是非可选的.
如果为其他参数提供默认值,则可以省略它们.
struct User {
// Properties
var name: String?
var username : String
var email: String?
init(username: String, name: String? = nil, email: String? = nil) {
self.username = username
self.name = name
self.email = email
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以将这三种形式与一个初始化程序一起使用
User(username: "Foo")
User(username: "Foo", name: "Bar")
User(username: "Foo", name: "Bar", email:"john@doe.com")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我建议将所有属性声明为非选项.缺少值可以用空字符串表示,您永远不会处理可选绑定或强制解包.
struct User {
// Properties
var name, username, email : String
init(username: String, name: String = "", email: String = "") {
...
Run Code Online (Sandbox Code Playgroud)
初始化程序的行为完全相同
| 归档时间: |
|
| 查看次数: |
383 次 |
| 最近记录: |