智清 發表於 2023-3-13 14:22:31

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

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>一、思路来源</li><li>二、示例</li><li>三、源码</li><li>四、总结</li></ul></div><p class="maodian"></p><h2>一、思路来源</h2>
<div class="cros igoods"><div class="goodsin" data-img="https://img14.360buyimg.com/pop/jfs/t3229/39/2924280771/392779/d242f52a/57e8d68eN57129bbf.jpg" data-name="精通Swift设计模式(图灵出品)" data-owner="京东自营" data-price="77.4" data-tgid="38" data-url="https://union-click.jd.com/jdc?e=&amp;p=JF8BAMoJK1olXwUFU1xdCE4TBl8IG1MTWgIAVm4ZVxNJXF9RXh5UHw0cSgYYXBcIWDoXSQVJQwYCXFhaDEkVHDZNRwYlJnUKKxgOchx0QC9vSQ1CD2BlU0QGeEcbM2gNHF4dXwMBZF5eDkwXAmoIK2sVXDZQOobrvpOysnPcsdTA1ZEyVW5dD00eBGYBHV0cXgUBZF5VDHtUVypcWBhdbTYyV25tOEsnAF9WdVpGWwQDBwleZhZABDhATFlHMwYLUlheDkwfB18KGloXXzYy"></div></div>
<p>最近在做 Flutter 开发时发现一个之前没注意到的空等运算符 &ldquo;??=&rdquo;,代表左边为空时,才会把右边的值赋给左边,然后返回左边的变量值;常用于避免多次赋值的情况;发现非常实用,于是给 swift 也自定义一个使用,最终如下;</p>
<p class="maodian"></p><h2>二、示例</h2>
<p>b1 获取 a1 的值,a1 如果不为空直接返回;为空则赋值;</p>
<div class="jb51code"><pre class="brush:java;">var a1: UIView?;
let b1 = a1 ??= UITableView();
print("a1: \(a1)");//a1: Optional(&lt;UITableView: 0x7feda0830600;
print("b1: \(b1)");//b1: &lt;UITableView: 0x7feda0830600
</pre></div>
<p>等同于:</p>
<div class="jb51code"><pre class="brush:java;">var a1: UIView?;
if(a1 == nil) {
    a1 = UITableView();
}
let b1 = a1;
</pre></div>
<p>可以让我们少写一行代码;</p>
<p class="maodian"></p><h2>三、源码</h2>
<div class="jb51code"><pre class="brush:java;">precedencegroup NilEqualPrecedence {
/// 优先从左向右, left, right or none
associativity: left
higherThan: AssignmentPrecedence//优先级,比等号运算符高
// lowerThan: AdditionPrecedence // 优先级, 比...低
assignment: true // 是否是赋值运算
}
/// 空等运算符声明
infix operator ??=: NilEqualPrecedence
/// 空等运算符实现
func ??= &lt;T&gt;(lhs: inout T?, rhs: T) -&gt; T {
    if lhs == nil {
      lhs = rhs;
    }
    return lhs!;
}
</pre></div>
<p class="maodian"></p><h2>四、总结</h2>
<p>Swift 最令人兴奋的特性之一(尽管也有争议)是自定义运算符的能力。</p>
<p>在您自己的代码中重写或定义新运算符时,请确保遵循以下准则:</p>
<ul><li>不要创建运算符,除非它的含义是显而易见且无可争议的。查找任何潜在的冲突以确保语义一致性。</li><li>注意自定义算子的优先级和关联性,只根据需要定义新的算子组。</li><li>如果有意义,请考虑为自定义运算符实现分配变体。</li></ul>
<p>编程工作的核心是创造。创造一切我们需要而没有的函数、工具、脚本...</p>
<p>以上就是Swift重构自定义空等运算符 &ldquo;??=&rdquo; 实例的详细内容,更多关于Swift重构自定义空等运算符的资料请关注琼殿技术社区其它相关文章!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>Swift 重构重载运算符示例解析</li><li>iOS Swift逻辑运算符示例总结</li><li>swift中自定义正则表达式运算符=~详解</li><li>Swift心得笔记之运算符</li><li>Swift之运算符重载示例详解</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: Swift重构自定义空等运算符 “??=” 实例