美文网首页
Swift自定义操作符(一)

Swift自定义操作符(一)

作者: 仙人掌__ | 来源:发表于2021-05-20 20:51 被阅读0次

    前言

    最近在研究GPUImage3代码,看到如下这一段代码

    infix operator --> : AdditionPrecedence
    //precedencegroup ProcessingOperationPrecedence {
    //    associativity: left
    ////    higherThan: Multiplicative
    //}
    @discardableResult public func --><T:ImageConsumer>(source:ImageSource, destination:T) -> T {
        source.addTarget(destination)
        return destination
    }
    

    上面的代码自定义了一个运算符 --> 这个运算符需要两个操作数,优先级与+和-一样,该操作符使用的代码

    camera --> operation --> renderView
    

    它与GPUImage中addTarget:方法效果一样。

    在学习过程中发现GPUImage3的代码比GPUImage的代码简洁很多,这里不得不为Swift的简洁特性点赞。下面就来看看Swift中自定义操作符的语法规则

    自定义运算符的语法

    1、infix|prefix|postfix operator 运算符 : 优先级描述符
    2、func 运算符() -> 返回值 {}  定义该运算符的函数功能
    

    这两个步骤缺一不可,接下来逐个解释:
    infix|prefix|postfix 代表了操作符的个数;infix为需要两个操作符,prefix代表左操作符(类似++a) postfix代表右操作符(类似a++)
    operator 关键字 重载
    运算符 要定义的自定义运算符,例如上面的-->
    : 这里的冒号不可少
    优先级描述符 代表了该运算符的优先级,可以使用系统内置的优先级描述符例如AdditionPrecedence(和加减法优先级一样)、MultiplicationPrecedence(和乘除法优先级一样),也可以使用自定义的优先级描述符,自定义语法如下:

    precedencegroup InnerProductPrecedence {
        associativity: none
        higherThan: MultiplicationPrecedence, AdditionPrecedence
    }
    

    precedencegroup:自定义优先级的关键字
    InnerProductPrecedence:自定义优先级名
    associativity:是否允许结合律,可取值为none、left。none代表只允许两个操作数计算,left代表如果多个同类的操作符顺序出现那么按照从左往右的顺序计算(例如加法,减法)
    higherThan:代表其优先级要高于某个优先级

    然后就是通过func 关键字定义该操作数的函数功能

    相关文章

      网友评论

          本文标题:Swift自定义操作符(一)

          本文链接:https://www.haomeiwen.com/subject/keozhltx.html