ios – Swift对象初始化(类工厂方法,默认初始化,方便初始化)

前端之家收集整理的这篇文章主要介绍了ios – Swift对象初始化(类工厂方法,默认初始化,方便初始化)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
嗨,我想弄清楚在 Swift中使用对象的最佳模式.

我认为我使用初始化器,方便和默认都是正确的…但是类工厂方法会发生什么?

我试图创建一个简单的类Person和子类Student,只有很少的属性方法.这是最正确的方法吗?

class Person{

    var _name: String
    var _surname: String
    var _dateOfBirthday: String
    var _phoneNumb: [String]

    init(name:String,surname:String,dateOfBirthday:String,phone:[String]){
        self._name = name
        self._surname = surname
        self._dateOfBirthday = dateOfBirthday
        self._phoneNumb = phone
    }

    convenience init() {
        self.init(name:"",surname:"",dateOfBirthday:"",phone:[])
    }

    convenience init(name:String){
        self.init(name:name,phone:[])
    }


}



class Student:Person{

    var _studentId:Int

    init(name: String,surname: String,dateOfBirthday: String,phone: [String],id:Int) {
        self._studentId = id
        super.init(name: "",surname: "",dateOfBirthday: "",phone: [])
    }

    convenience init(){
        self.init(name: "",phone: [],id:0)
    }

    convenience init(name:String){
        self.init(name:name,phone:[],id:0)
    }

}

如果我想添加一个类工厂方法怎么办?会是这样的事情还是我做错了?

class func Person() -> Person {
 var x = Person()
 x._telephoneNumber = [String]() // is this needed? or i can initialize it later?
 return x
}

class func PersonWithName(name:String) -> Person {
 var x = Person(name:name,telephoneNumber:[])
 return x
}

它是否正确?为什么使用init而不是类工厂会更好?

解决方法

is this correct? why would it be better to use the init instead of the class factory?

如果可以使用init,为什么要创建“类工厂”? init是用于创建类的新对象的惯用Swift方法.

在大多数情况下,当您想要为类的主(指定)初始化程序添加快捷方式时,添加便利初始化程序是正确的选择.但是,在您的情况下,它们完全没必要,因为Swift支持默认参数值.

只需像这样定义你的初始值设定项:

init(name:String = "",surname:String = "",dateOfBirthday:String = "",phone:[String] = []) { ... }

这样,您可以将其作为Person()或Person(名称:“Andrew”)或任何其他参数组合调用.

编辑:

作为旁注,使用下划线为实例变量添加前缀通常似乎不是惯用的Swift.可以省略下划线并使用self.消除本地和实例变量之间的歧义:

self.name = name
self.surname = surname
self.dateOfBirthday = dateOfBirthday
self.phoneNumb = phone

猜你在找的Xcode相关文章