Swift如何使用nil属性创建和测试对象?

时间:2016-04-28 01:05:33

标签: ios swift swift2

我正试图绕过选项,让我说我有以下几个类:

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()

3 个答案:

答案 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或实际值,在你的情况下是一个字符串。