自学swift (2) ---修饰符(后续补充中)

1.private(set)
在var或subscript定义作用域之前,你可以通过private(set)或internal(set)先为它们的set权限申明一个较低的访问级别。

private(set) var userName: String?

虽然你可以在其他的源文件中实例化该类并且获取到userName属性的值,但是你不能对其进行赋值。就是说,你想用,可以直接拿去用。想知道值是怎么来的?对不起,你没权限。

2.required
如果子类需要添加异于父类的初始化方法时,必须先要实现父类中使用required修饰符修饰过的初始化方法。

class FatherClass {
        var string :String
       required init(string :String){
           self.string = string
        }
    }

    class SubClass: FatherClass {
        init (i : Int){
            super.init(string: String(i))
        }
        required init(string: String) {
            fatalError("init(string:) has not been implemented")
        }
    }

这样父类的方法需要加required 并且子类也要写required 的这个方法 但是只是报错,告诉你,不好意思,父类的这个方法在我们子类不能用了,只能用我们子类的方法。(就好像国家制定个政策,告知美的政府,你可以不执行,当地政府制定一个自己的政策,在本地国家政策市行不通的)

        let sub = SubClass(string: "la")
        print("sub \(sub.string)")

对于上边的代码,如果你这样调用,是不行的。因为子类不允许父类的初始化方法执行了。
正确的方法应该是
let father = SubClass(i: 3)
print("father\(father.string)")

3.override
这是个重写方法。和上一条不同的是,父类方法子类调用,ok可以。但是我要重新制定下方法里做什么。

    class FatherClass {
        func description() -> String {
            return "fatherClass description"
        }
    }

    class SubClass: FatherClass {
        override func description() -> String {
            return "subClass description"
        }
    }

省厅说一人发10000块补助,县里拿到后重写了下方法,一人发了100。大概就是这个意思吧。

4.mutating
为了能在方法中改变属性的值

struct Point {  
    var x = 0, y = 0 
    mutating func moveXBy(x:Int,yBy y:Int) {  
        self.x += x  
        self.y += y  
    }  
}  
var p = Point(x: 5, y: 5)  
p.moveXBy(3, yBy: 3)  

在值类型的实例方法中,也可以直接修改self属性值。

5.convenience
convenience只作为补充和提供使用上的方便。所有的convenience初始化方法都必须调用同一个类中的designated初始化完成设置,另外convenience的初始化方法是不能被子类重写或从子类中以super的方式被调用的。

6.final
final 修饰符只能修饰类,表明该类不能被其他类集成,也就是它没资格当父亲 final不能修饰结构体和枚举

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值