swift编程开发Swift开发swift开发技巧

Swift 协议

2017-11-23  本文已影响12人  追逐_chase
Swift.png
协议的简单介绍
protocol SomeProtocol {
// 这里是协议的定义部分
}
struct SomeStructure: FirstProtocol, AnotherProtocol { // 这里是结构体的定义部分
}

class SomeClass: SomeSuperClass, FirstProtocol, AnotherProtocol { // 这里是类的定义部分
}

属性的要求
protocol SomeProtocol {
    var mustBeSettable: Int { get set }
    var doesNotNeedToBeSettable: Int { get }
}

//例子

//定义一个协议
protocol Work{
    var type:String {get set}
    var name:String {get set}
}

struct Type:Work{
  //类型必须声明协议里面的属性
    var type: String;
    var name: String;
}
//结构体有逐一构造器
let t = Type(type: "互联网", name: "IT部门");
t.type
t.name
//打印:"互联网"    "IT部门"

方法
//定义一个协议
protocol Run {
    
    func directionRun();
}


//定义一个枚举
enum Direction:Run {
    
    case left
    case right
    case up
    case down
    func directionRun() {
        print("跑的方向")
    }
}

Direction.left.directionRun();

//定义一个协议
protocol Togglable {
    mutating func toggle()
}

//定义一个枚举 遵循协议Togglable
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 现在的值为 .On

构造器
protocol SomeProtocol {
    init(someParameter: Int)
}
class SomeClass: SomeProtocol {
    required init(someParameter: Int) {
// 这里是构造器的实现部分 }
}
protocol SomeProtocol {
    init()
}
class SomeSuperClass {
    init() {
// 这里是构造器的实现部分
     }
}
class SomeSubClass: SomeSuperClass, SomeProtocol { // 因为遵循协议,需要加上 required
// 因为继承自父类,需要加上 override
required override init() {
// 这里是构造器的实现部分
     }
}
代理
//协议:遵循class类 方便delege属性 weak
protocol Work:class {
    
    func test();
}

//工作的员工
class Person:Work {
    func test() {
        print("开始工作");
    }
    
}

//宠物狗
class Dog: Work {
    func test() {
        print("旺旺")
        
    }
}

//老板
class Master {
//weak:是修饰 类类型的
   weak var delegate:Work?
}

let M = Master();
//设置代理
M.delegate = Dog();
M.delegate?.test()

让协议的方法可选

@objc
protocol Work {
    //可选择实现 方法
    @objc optional func test();
    
}

class Person:Work {
    
}

上一篇 下一篇

猜你喜欢

热点阅读