我不是罗大锤我不是罗大锤

我不是罗大锤

我不是罗大锤我不是罗大锤

我不是罗大锤

首页首页
分类分类
标签标签
友情链接友情
日记日记
开发中
博客仍在开发中。
Powered byNola
Swift Protocol 简单概念Swift Protocol 简单概念

Swift Protocol 简单概念

&Swift#Swift

允许评论

2 个月前

一、建立 Protocol

  • 方法只需要定义名称、参数、回传值。
  • 描述该如何设计某个东西。
  • 可能是描述某种特性或一些列相关的功能。
protocol Equatable {
  static func == (lhs: Self, rhs: Self) -> Bool
}

二、添加属性

所有的属性都用 var 声明,只需要写名称、类型以及是否要能 get 和 set。

protocol User {
  var name: String { get set }
  var birth: Date { get }
  var age: Int { get }
  
  // 可以提供预设值
  var age: Int {
    Date.now.year - birth.year
  }
}

// 上方 Date.now.year 操作的扩展方法
extension Date {
    var year: Int {
        Calendar(identifier: .gregorian).dateComponents(in: .current, from: self).year!
    }
}

三、Conform 其他 Protocol

protocol User: Equatable {
  var name: String { get set }
  var birth: Date { get }
  var age: Int { get }
}

不可以使用 extension 来为 Protocol conform 其他 Protocol。

// ❌ 错误代码,Extension of protocol 'User' cannot have an inheritance clause
extension User: Equatable {}

四、泛型

protocol User {
  // 泛型定义
  associatedtype T: Hashable
  
  var name: String { get set }
  var birth: Date { get }
  var password: T { get }
}
struct Consumer: User {
  // 明确告诉 Swift 是什么具体类型,非必要。
  // Swift 可以根据下面的 password 的实际类型推断,
  // 大部分时候 typealias 只是为了让 xcode 自动生成相关方法和属性。
  typealias T = String
  
  var name: String
  var birth: Date
  var password: String
}
目录
一、建立 Protocol
二、添加属性
三、Conform 其他 Protocol
四、泛型
暂无评论