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

 更新时间:2023年03月13日 14:22:31   作者:SoaringHeart  
这篇文章主要为大家介绍了Swift重构自定义空等运算符 “??=” 实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

一、思路来源

最近在做 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学习笔记之元组(tuples)

    Swift学习笔记之元组(tuples)

    这篇文章主要给大家介绍了Swift中元组(tuples)的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • 详解Swift中的Characters字符类型与String字符串类型

    详解Swift中的Characters字符类型与String字符串类型

    Swift中的字符串操作相当便捷,下面我们来详解Swift中的Characters字符类型与String字符串类型,需要的朋友可以参考下
    2016-06-06
  • swift内存管理指针类型使用实例详解

    swift内存管理指针类型使用实例详解

    这篇文章主要为大家介绍了swift内存管理指针类型使用实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Swift代码自定义UIView实现示例

    Swift代码自定义UIView实现示例

    这篇文章主要为大家介绍了Swift如何自定义UIView的实现示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步,早日升职加薪
    2021-10-10
  • Swift中类与结构的初始化示例解析

    Swift中类与结构的初始化示例解析

    这篇文章主要为大家介绍了Swift中类与结构的初始化解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • Swift中的限定扩展详析

    Swift中的限定扩展详析

    扩展就是向一个已有的类、结构体或枚举类型添加新功能。下面这篇文章主要给大家介绍了关于Swift中限定扩展的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2018-03-03
  • Swift可选值优化示例详解

    Swift可选值优化示例详解

    这篇文章主要为大家介绍了Swift可选值优化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 浅析Swift中struct与class的区别(汇编角度底层分析)

    浅析Swift中struct与class的区别(汇编角度底层分析)

    这篇文章主要介绍了Swift中struct与class的区别 ,本文从汇编角度分析struct与class的区别,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • swift framework使用OC 代码两种方式示例

    swift framework使用OC 代码两种方式示例

    这篇文章主要为大家介绍了swift framework使用OC 代码两种方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Swift中添加双击手势识别器

    Swift中添加双击手势识别器

    在这次IOS应用开发教程中,我们打算实现手势识别。正如你所知道的,IOS支持大量的手势操作,它们能提供了很好的应用控制和出色用户体验。
    2019-08-08

最新评论