美文网首页程序员
Swift笔记<十八>协议

Swift笔记<十八>协议

作者: 大基本功 | 来源:发表于2018-04-09 15:30 被阅读13次
    1.协议的基本使用
    • 协议的格式
      • 协议的定义方式与类,结构体,枚举的定义都非常相似

      protocol SomeProtocol{//协议方法}

    • 遵循协议格式

      class SomeClass:SomeSuperClass,FirstProtocol,AnotherProtocol{
      //类的内容
      //实验协议中的方法
      }

    • 类遵循协议
     //如果遵循了协议,要求必须要实现协议里面所有的方法
    //类遵循协议
    class Person:Work{
       
       func run(){
           print("xxx")
       }
    }
    
    • 枚举遵循协议
    enum Direction:Work{
       case left
       case right
       case up
       case down
       
       func run() {
           print("枚举")
       }
    }
    Direction.left.run()
    
    • 结构体遵循协议
    struct Point:Work{
       
       func run() {
           print("结构体")
       }
    }
    
    let p = Point()
    p.run()
    
    • 继承某个类并遵循协议
    protocol Work {
        func run()
    }
    class Person{
    }
    class Stu:Person,Work{  
    }
    
    • 如果协议后面:协议,代表继承
    protocol Work {
        func run()
    }
    protocol Work2:Work {
        func run2()
    }
    class Person{ 
    }
    class Stu:Person,Work2{
        func run() {
            print("1")
        }
        func run2() {
            print("2")
        } 
    }
    
    • 总结:如果后面跟的是类,代表继承(不支持多继承)
      //如果跟的是协议:遵循协议
    2.协议中代理的使用
    • protocol xxx :class 遵循协议类不用继承NSObject
    • protocol xxx :NSObjectProtocol 遵循协议类需继承NSObject,因为NSObject实现了NSObjectProtocol的函数
    protocol Work :NSObjectProtocol {
        func doWork()
    }
    class Person: NSObject,Work{
        func doWork() {
            print("人开始工作")
        }
    class Master{
        weak var delegate:Work?  
    }
    let master = Master()
    master.delegate = Person()
    
    3.协议中的可选
    • 协议的可选仅仅是OC的特性,swift是不支持的
    • 解决方案就是让swift协议拥有OC特性
    @objc
    protocol Work {
      @objc optional func doWork()
    }
    class Person:Work{    
    }
    

    相关文章

      网友评论

        本文标题:Swift笔记<十八>协议

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