嗨,我想弄清楚在
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