swift构造器,swift类的初始化方法

swift里面会经常看到申明属性申明成可选类型,其实这和构造器也是有关系的。(申明变量时,用?申明可选值类型的话,在之后使用时都需要显式的写上解包操作,而用!申明时,之后使用会默认隐式的加上!解包,两者申明之后不初始化都会默认一个nil值)

构造器

class Student:NSObject {
    var name:String?
    var age:Int?
    var height:Double!//申明成可选值类型不初始化会默认nil值在以后使用不需要解包操作默认隐式加上了
    var weight:Double?
    
    init(name:String?) {  //指定构造器
        super.init()
        self.name = name
    }

    init(name:String?, age:Int?, weight:Double?) throws { //指定构造器
        super.init()
        
        guard name != nil else {
            throw MyError.empty("姓名不能为空")
        }
        self.name = name
        self.age = age
        self.weight = weight
    }
    
    init(name:String?, height:Double?) {
        super.init()
        self.name = name
        self.height = height
    }
    
    convenience init(name:String?, age:Int?, weight:Double?, height:Double?) { //便利构造器里面不能调用super,便利构造器必须调用指定构造器去初始化
        self.init(name: name, height: height)
        self.age = age
        self.weight = weight
    }
}
let student = Student() //由于有指定构造器,系统默认的默认构造器没了,以至于报错

总结 当没有自定义构造器且属性都有默认值的时候,会有默认构造器。当有指定构造器时,默认构造器会不能用。便利构造器必须要调用指定构造器来完成初始化,便利构造器不能调用super。关于构造器更多信息请前往这里

最近的文章

swift异常处理,swift的try catch的正确使用姿势

程序健壮性很重要,要是一直在崩溃,给用户的印象真的是致命的。好在有异常捕获,有一些救治措施。看代码,学习swift的异常捕获enum MyError : Error { case empty(String) case tooBig(String)}class Student:NSObject { var name:String? var age:Int? var height:Double!//申明成可选值类型,不初始化会默认nil值,用!在以后使用不需要解包...…

码农世界继续阅读
更早的文章

Xcode miss file

相信在开发中,经常会发现这样的警告,而且一出现就是大量的,造成原因:更改了项目目录文件名(或者修改了项目名),造成了文件的路径改变。总结了一些解决办法: 打开Xcode->Prefrences->Source Control 去掉Enable Source Control前面的勾,这样的话Xcode就不能为我们检测文件的变化,只能靠SVN、git去管理了。 进入终端,如果使用SVN管理,则svn delete命令 加上miss的文件去删除就好了,若是使...…

码农世界继续阅读