加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 17:33:09 所属栏目:百科 来源:网络整理
导读:嗨,我想弄清楚在 Swift中使用对象的最佳模式. 我认为我使用初始化器,方便和默认都是正确的…但是类工厂方法会发生什么? 我试图创建一个简单的类Person和子类Student,只有很少的属性和方法.这是最正确的方法吗? class Person{ var _name: String var _surna
嗨,我想弄清楚在 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读