美文网首页
Swift----------------协议

Swift----------------协议

作者: 小屋新 | 来源:发表于2017-04-20 19:51 被阅读9次

    定义一个协议的形式很简单,如下:

    protocol SomeProtocol {
        // protocol definition goes here
    }
    

    在自定义类型声明中,将协议名放在类型名的冒号之后来表示该类型采纳一个特定的协议。多个协议可以用逗号分开列出,如下:

    struct SomeStructure: FirstProtocol, AnotherProtocol {
        // structure definition goes here
    }
    

    若一个类拥有父类,将父类名放在协议之前,并用逗号隔开,如下:

    class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol {
        // class definition goes here
    }
    

    声明: 协议有坑,若想协议正常使用,需要在protocol SomeProtocol后面加上 :NSObjectProtocol,形式如:

    protocol SomeProtoco:NSObjectProtocol{
    }
    

    关于属性
    协议中对属性的定义有要求:协议必须明确是 可读的 或者 可读和可写的,而且属性必须是变量,在名城前面使用 var关键字来声明,例:

    protocol SomeProtocol {
        var mustBeSettable: Int { get set }//可读可写
        var doesNotNeedToBeSettable: Int { get }//可读
        static var someTypeProperty: Int { get set }//可读可写
    }
    

    关于方法
    协议中方法的形式如下,只是在若是类方法需要在前面加static关键字,即使在类实现时,类型方法要求使用 class 或者 static 关键字作为前缀,例:

    protocol SomeProtocol {
        static func someTypeMethod()//类方法
        func random() -> Double//实例方法,有返回参数,类型为Double
    }
    

    关于异变
    异变即改变实例方法的属性,此时需要使用在协议中 func 关键字前面加上 mutating 关键字,例:

    protocol Togglable {
        mutating func toggle()
    }
    

    在工程中这样使用:

    enum OnOffSwitch: Togglable {
        case Off, On
        mutating func toggle() {
            switch self {
            case Off:
                self = On
            case On:
                self = Off
            }
        }
    }
    var lightSwitch = OnOffSwitch.Off
    lightSwitch.toggle()
    // lightSwitch is now equal to .On
    

    相关文章

      网友评论

          本文标题:Swift----------------协议

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