Swift学习之协议二

作者: 冷武橘 | 来源:发表于2020-09-23 10: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()
  • 1、扩展可以给协议提供默认的实现,也间接实现可选协议的效果。
  • 2、扩展可以给协议扩充(协议中从未声明过的方法)

3、可选协议

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

  • 1、巧妙利用协议的扩展,给协议提供默认的实现
 protocol Drawable {
  
     func test()
}

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

 }
  • 2、swift中调用oc的api
@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()
    }
}
  • weak只能修饰class对象,而AnyObject代表只有类才能遵守的协议,因此协议必须继承AnyObject。

相关文章

  • Swift学习之协议二

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

  • Swift学习之协议

    协议 协议定义了用来实现某一特定任务或者功能的属性、方法以及需要的东西。 类、结构体、枚举都可以采用协议,但是都必...

  • Swift学习之协议三

    面向协议编程 (Protocol Oriented Programming,以下简称 POP) 是 Apple 在...

  • Swift学习之协议一

    协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守 一、属性 1、协议中定义属性时必须用var...

  • Swift语言总结

    Swift学习总结 协议 协议是方法的集合,它可以把看似不想关的对象的公共行为放到一个协议中。协议在Swift开发...

  • Swift 5.1 (20) - 协议

    Swift 5.1 (20) - 协议Swift 5.1 (20) - 协议

  • Swift进阶之RxSwift(四)

    前言 Swift进阶之RxSwift(一) Swift进阶之RxSwift(二) Swift进阶之RxSwift(...

  • iOS | Swift5.0学习 & 总结(三)

    Swift 协议 1.协议介绍 协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守(多个协议之...

  • Swift学习 -协议

  • Swift学习:协议

    本篇将详细总结介绍Swift协议的用法;协议是定义一些规范(属性、功能方法),然后由类、结构体或者枚举遵循并实现这...

网友评论

    本文标题:Swift学习之协议二

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