我希望能够代替使用!用于在Swift代码中强制展开。如果这是C ++,则可以尝试使用#define或类似的方法,但是我不确定如何实现。
我不能只在全球范围内替换!与,因为它不是用于声明强制解包变量,也可能是其他一些东西
使用某种Xcode宏或插件会更容易吗?
不幸的是,您不能使用字符作为后缀运算符,例如!,但这是一种替代方法:
postfix operator ?
extension Optional {
postfix public static func ?(a: Optional<Wrapped>) -> Wrapped {
return a!
}
}
Run Code Online (Sandbox Code Playgroud)
例:
var crashme : String? // nil
print(crashme?) // crash
Run Code Online (Sandbox Code Playgroud)
我喜欢这个替代符号,因为它暗示着定时炸弹,这正是IUU。也许这意味着嘿醒!
正如注释和Matt的答案中所讨论的那样,该字符不能用作运算符,因此,如果您特别想使用它,则可以使用此处所示的扩展名来使用它。
extension Optional {
var : Wrapped {
return self!
}
}
var string: String? = "42"
print(string.) // 42
var number: Int? = nil
print(number.) // Fatal error: Unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)
此扩展使用Optional类型,因此可以与符合Optional的任何数据类型一起使用。
但是,如果要使用后缀路由,则以下选项提供了一个选项:
postfix operator ?
extension Optional {
postfix static func ?(optional: Optional<Wrapped>) -> Wrapped {
return optional!
}
}
var bad: String?
print(bad?)
Run Code Online (Sandbox Code Playgroud)
可悲的是,骷髅和交叉骨在这里的显示不如在Xcode中那样。
关于OP的重要说明,如果您希望在团队中强制使用此功能,我建议使用swiftlint之类的工具,您可以在其中修改有关强制展开的规则,以要求其中一些。
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |