美文网首页
Swift和Object-C协议的区别

Swift和Object-C协议的区别

作者: 野比大雄001 | 来源:发表于2017-07-12 17:41 被阅读88次

    1.OC中的协议只能用于类,swift中的协议不仅能用于类,还能用于结构体和枚举

    2.OC中的协议可以设置可选实现,但Swift中的协议必须实现

    3.Swift中的协议增加了一个关键字mutating可以决定结构体和枚举实现协议的时候,是否可以修改属性的值

    //扩展

    extensionInt{

    funcdescription() ->String{

    // Self的好处:专门用于不确定数据类型的

    return"Int类型的数字\(self)"

    }

    }

    print(3.description())

    //协议扩展的好处1:

    protocolProtocolNumber {

    funcdescribe() ->String

    }

    //扩展实现协议

    extensionInt:ProtocolNumber{

    funcdescribe() ->String{

    return"Int类型的数字\(self)"

    }

    }

    extensionDouble:ProtocolNumber{

    funcdescribe() ->String{

    return"Double类型的数字\(self)"

    }

    }

    //定义一个协议类型

    vara:ProtocolNumber=2

    print(a.describe())

    a=3.14

    print(a.describe())

    //协议扩展的好处2:

    //定义一个协议

    protocolNumberProtocol{

    }

    //扩展实现协议

    extensionInt:NumberProtocol{

    }

    extensionDouble:NumberProtocol{

    }

    //给协议扩展方法

    extensionNumberProtocol{

    funcdescription() ->String{

    ifselfisInt{

    return"我是一个Int类型的数字\(self)"

    }

    ifselfisDouble{

    return"我是一个Double类型的数字\(self)"

    }

    return"我既不是Int也不是Double类型的数字\(self)"

    }

    }

    //可以整形调用或者浮点型调用

    print(3.44.description())

    print(3.description())

    //案例需求:给所有数字类型,扩展一个平方的函数,返回自己的操作

    //定义个协议

    protocolNumbersProtocol{

    }

    //扩展实现协议

    extensionInt:NumbersProtocol{

    }

    extensionDouble:NumbersProtocol{

    }

    //给协议扩展方法3

    extensionNumbersProtocol{

    //我们不确定返回的Self到底是什么类型

    funcsquareValue() ->Self{

    ifselfisInt{

    letn =selfas!Int

    returnn * nas!Self

    }

    ifselfisDouble{

    letn =selfas!Double

    returnn * nas!Self

    }

    return0as!Self

    }

    }

    print(3.44.squareValue())

    print(3.squareValue())

    //定义一个协议

    protocolLoveMusic {

    funcsongMusic()

    varsimpleDescription:String{get}

    //mutating可以决定结构体和枚举实现协议的时候,是否可以修改属性的值

    mutatingfuncmodifyMusic(name:String)

    }

    //协议可以继承协议(多个)

    protocolLoveMusic2:Love,Skill{

    funcsongMusic()

    varsimpleDescription:String{get}

    mutatingfuncmodifyMusic(name:String)

    }

    //协议的重写

    protocolLove{

    varname:String{getset}

    }

    protocolSkill{

    varname:String{getset}

    }

    //我们重写协议中的属性,让其只要get方法即可

    protocolLoveMusic3:Love{

    funcsongMusic()

    varsimpleDescription:String{get}

    mutatingfuncmodifyMusic(name:String)

    }

    //可以实现多个协议

    classStudent:Love,Skill{

    internalvarname:String=""

    internalfuncmodifyMusic(name:String) {

    }

    }

    //创建一个协议只能被类遵守

    protocolMyClassDelegate:class{

    funcgetName()

    }

    classUDP {

    weakvardelegate:UDPDelegate?

    }

    protocolUDPDelegate:class{

    }

    相关文章

      网友评论

          本文标题:Swift和Object-C协议的区别

          本文链接:https://www.haomeiwen.com/subject/sxobhxtx.html