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而不是类工厂会更好? 解决方法
如果可以使用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |