swift - 如何在 swift struct/class 类型中支持这种初始化?
问题描述
例子:
struct FanSpeed {
var fanSpeed: Int {
willSet{
previousFanSpeed = fanSpeed
}
}
var previousFanSpeed: Int
init(fanSpeed: Int) {
self.fanSpeed = fanSpeed
self.previousFanSpeed = fanSpeed
}
}
我希望能够以这种方式初始化 FanSpeed:
let fs:FanSpeed = 4
我知道有一个我可以遵守的协议来支持这一点,但现在不记得了。谢谢阅读!
解决方案
您正在寻找 ExpressibleByIntegerLiteral 协议。
struct FanSpeed: ExpressibleByIntegerLiteral {
typealias IntegerLiteralType = Int
init(integerLiteral value: Int) {
self.init(fanSpeed: value)
}
var fanSpeed: Int {
willSet{
previousFanSpeed = fanSpeed
}
}
var previousFanSpeed: Int
init(fanSpeed: Int) {
self.fanSpeed = fanSpeed
self.previousFanSpeed = fanSpeed
}
}
现在,您可以使用整数值初始化 FanSpeed 类型的变量。
let fanSpeed = FanSpeed(fanSpeed: 3)
let fanSpeed: FanSpeed = 3
let fanSpeed = 3 as FanSpeed
let fanSpeed: [FanSpeed] = [1, 2, 5]
let fanSpeed = [1, 2, 5] as [FanSpeed]
推荐阅读
- c - 共享对象链接和 Fpic 的问题
- bash - 将具有大部分空字段的多个 CSV 行合并到每个时间戳的单行中
- laravel - 将 Laravel Nova 过滤器应用于计算值
- javascript - 更新到最新版本的 react 和 material ui 后在 redux 中编写函数时出错
- python - 获取电子邮件主题的简单方法是什么
- json - 断言一个 Json 对象
- java - 使用 MariaDB (Current_User) 触发 HeidiSQL 中的问题
- javascript - 为什么 popper.js 在 laravel 中不起作用
- java - Java在通配符上限映射中保留泛型类型
- macos - 'gtk/gtk.h' 文件未找到 Mac