查看: 110|回覆: 0

[Swift] Swift重构自定义空等运算符 “??=” 实例

[複製鏈接]

5

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2010-4-3
發表於 2023-3-13 14:22:31 | 顯示全部樓層 |閲讀模式

一、思路来源

最近在做 Flutter 开发时发现一个之前没注意到的空等运算符 “??=”,代表左边为空时,才会把右边的值赋给左边,然后返回左边的变量值;常用于避免多次赋值的情况;发现非常实用,于是给 swift 也自定义一个使用,最终如下;

二、示例

b1 获取 a1 的值,a1 如果不为空直接返回;为空则赋值;

var a1: UIView?;
let b1 = a1 ??= UITableView();
print("a1: \(a1)");//a1: Optional(<UITableView: 0x7feda0830600;
print("b1: \(b1)");//b1: <UITableView: 0x7feda0830600

等同于:

var a1: UIView?;
if(a1 == nil) {
    a1 = UITableView();
}
let b1 = a1;

可以让我们少写一行代码;

三、源码

precedencegroup NilEqualPrecedence {
  /// 优先从左向右, left, right or none
  associativity: left
  higherThan: AssignmentPrecedence//优先级,比等号运算符高
  // lowerThan: AdditionPrecedence // 优先级, 比...低
  assignment: true // 是否是赋值运算
}
/// 空等运算符声明
infix operator ??=: NilEqualPrecedence
/// 空等运算符实现
func ??= <T>(lhs: inout T?, rhs: T) -> T {
    if lhs == nil {
        lhs = rhs;
    }
    return lhs!;
 }

四、总结

Swift 最令人兴奋的特性之一(尽管也有争议)是自定义运算符的能力。

在您自己的代码中重写或定义新运算符时,请确保遵循以下准则:

  • 不要创建运算符,除非它的含义是显而易见且无可争议的。查找任何潜在的冲突以确保语义一致性。
  • 注意自定义算子的优先级和关联性,只根据需要定义新的算子组。
  • 如果有意义,请考虑为自定义运算符实现分配变体。

编程工作的核心是创造。创造一切我们需要而没有的函数、工具、脚本...

以上就是Swift重构自定义空等运算符 “??=” 实例的详细内容,更多关于Swift重构自定义空等运算符的资料请关注琼殿技术社区其它相关文章!

您可能感兴趣的文章:
  • Swift 重构重载运算符示例解析
  • iOS Swift逻辑运算符示例总结
  • swift中自定义正则表达式运算符=~详解
  • Swift心得笔记之运算符
  • Swift之运算符重载示例详解
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部