一步步学习Swift

Swift学习之协议二

2020-09-23  本文已影响0人  冷武橘

一、协议和扩展

1、协议

如果一个类型已经实现了协议的所有要求,但是还没有声明它遵守了这个协议,可以通过扩展来让它遵守这个协议。

protocol TestProtocol {
    func test()
}

class Student{
    func test() {}
}

extension  Student : TestProtocol {}

2、扩展

extension还可以给协议扩展

protocol TestProtocol {
    func test()
    static func  run()
}

extension  TestProtocol{
    func test() {
        print("扩展可以给协议提供默认的协议")
    }
    
    static func run() {
        print("扩展可以给协议提供默认的实现")
    }
    
    func sayHello()  {
        print("扩展还可以给协议扩充从未声明的方法")
    }
    
}

class  Student:TestProtocol{}

class Person: TestProtocol{}

Student.run()
Person.run()

let p = Person()
p.sayHello()

3、可选协议

swift中协议中的方法都是必须实现的,因此要想实现像oc那样optional的效果,只有通过以下两种方式:

 protocol Drawable {
  
     func test()
}

extension Drawable{
    func test() {
        print("优雅地实现了oc协议中optional的效果")
    }    
}
    
class Student:Drawable {

 }
@objc protocol Drawable {
  @objc optional func test()
}
class Student:Drawable { }

二、代理


class ViewController: UIViewController,Testdelegate {
    func test() {
        print("测测测")
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let sec = SecController()
        sec.delegate = self
        self.present(sec, animated:true, completion: nil)
    }
}

protocol Testdelegate:AnyObject {
    func test()
}

class SecController: UIViewController {
   weak var delegate:Testdelegate?
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .red
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.delegate?.test()
    }
}
上一篇 下一篇

猜你喜欢

热点阅读