/** * 今天我们来谈一谈Swift中的操作符重载,这一功能非常实用,但是也相当有风险。正所谓“能力越大责任越大”,这句话用来形容操作符重载最合适不过了。它可以令你的代码更加简洁,也可以让一个函数调用变得又臭又长。而对于那些没怎么读过你的代码的人来说,操作符的使用同时也会让代码的可读性大打折扣。 谨慎引入,按需使用。比如在连接两个字串的时候你就可以通过重载加法来实现。甚至于你仅在屏幕上输入一个加号,就能响应一个网络链接、播放一段音乐或者完成你能实现的其他任何功能。然而过于复杂的功能对编码来说简直就是灾难,合理的做法就是仅在必要时重载操作符,不做任何多余的事。如果你非要做点奇怪的事,那就为网络响应这样的功能取一个明显又合适的函数名。 无论你何时想采用运算符重载,你都需要考虑一下是否值得重载它而不是用一个函数调用。函数调用或许颇费周折,但更能确切的表达它的功能(如果函数名恰到好处的话)。假如你要频繁做类似于加减乘除赋值比较的操作,那么运算符重载的确是个很合适的解决方案。 */

/** * Swift中的重载运算符里面还是有一些比较不错的地方。你可以通过重载"=="算符来实现对自定义类的比较。假如你想实现这一功能你就需要使用Equatable协议,Equatable协议主要应用于泛型编程(有关Swift的泛型编程可以参考这里)。如果你按照Equatable协议重载了"=="操作符,那么你无需再重载"!="操作符(因为“!=”的重载就是"=="的逻辑否)。 */

//Globally scoped operator function
func == (left: Temperature,right: Temperature) -> Bool
{
    if left.C == right.C
    {
        return true
    }
    else
    {
        return false
    }
}
//Custom type itself
struct Temperature:Equatable
{
    let C: Double
}
//Test
let tempOne = Temperature(C: 15)
let tempTwo = Temperature(C: 35)
let tempThree = Temperature(C: 15)
let OneTwoequality = (tempOne == tempTwo)       //Stores: false
let OneThreeEquality = (tempOne == tempThree)   //Stores: true

/** * 前面我讨论了一下NSDate的减法,是因为它在被调用时隐藏了不少的假定条件。在这里提醒一下:当你在考虑编码中是否要实现重载运算符的时候可以想想这个示例。如果你想在代码里一直使用相同的unitFlag来重载实现日期的减法,你需要多写一些代码来考虑多种情况。 如果你想重载内建类型以及不想修改(或者无法修改)的类型的运算符重载,你可以在扩展里面添加这个重载函数。且这个重载函数需要为全局作用域,并放在你随便哪个扩展存放的文件里面。 有一些运算符是不能重载的,最为明显的就是赋值运算"="(一个等号)。 */

/** * Swift提供了许多强大的、现代的编程特性,比如泛型、函数式编程、一等类型(first class)的枚举、结构体等特性。 */
/** * 但是现在还有另外一个Swift的特性,你应该知道并且会爱上它,它就是运算符重载。 这是一个很好的方法,你能使用+、-、*、/等操作符作用在你喜欢的任何类型上面。如果你有一定的创造性,你甚至可以定义属于你自己的操作符。 */

//func add(left: [Int],right: [Int]) -> [Int] {
// var sum = [Int]()
// assert(left.count == right.count,"vector of same length only")
// for (key,_) in enumerate(left) {
// sum.append(left[key] + right[key])
// }
// return sum
//}
//
//var arr1 = [1,1]
//var arr2 = [1,1]
//var arr3 = add(arr1,arr2)
/** * 现在你必须选择一个字符作为你的运算符。自定义运算符可以以/、=、-、+、!、*、%、<、>、&、|、^、~或者Unicode字符开始。这个给了你一个很大的范围去选择你的运算符。但是别太高兴,选择的时候你还必须考虑重复输入的时候更少的键盘键入次数。 在这种情况下,你可以复制粘贴Unicode字符⊕作为很好适应你例子里面加法的实现。 */
///

swift学习笔记之运算符重载的更多相关文章

  1. ios – Swift:方法重载只在返回类型上有所不同

    我一直在看Swift类,其中定义了两种方法,它们的返回类型不同.我不习惯使用允许这种语言的语言,所以我去寻找描述它如何在Swift中工作的文档.我在任何地方都找不到任何东西.我本来期望在Swift书中有关于它的整个部分.这记录在哪里?

  2. ios – 在Swift中可以重载=运算符吗?

    可以在Swift中使用overload=运算符来接受例如CGFloat参数吗?我的方法(下面)不起作用.(编辑)重要:上面的编码方法确实有效.请seemyanswerbelow解释为什么我认为没有.解决方法对不起,我很难过.对于CGFloat参数,operator=不需要重载,因为Swift中包含了这样的重载.我试图做类似的事情这失败了,因为我无法放弃让XCode显示的错误让我感到困惑.当然,像我原来的问题(下面)中的方法适用于重载运算符.请随时投票以结束此问题.

  3. Swift 运算符重载

    但是现在还有另外一个Swift的特性,你应该知道并且会爱上它,它就是运算符重载。例如:我们在SwiftSpriteKitutilitylibrary代码中使用运算符重载去讲多个CGPoints对象相加,例如下面代码:1234letpt1=CGPointletpt2=CGPointletpt3=pt1+pt2letpt4=pt3*100方便吧?当一个人查看你的代码,他们希望操作符的默认行为,这时候运算符重载会使他们迷惑。幸运的是Swift让你能够定义属于你自己的自定义的运算符。

  4. Swift函数重载

    1、函数重载的概念函数的重载指的是多个函数享有相同的名字都是有不同的参数或返回值类型不同,它们互相成为重载关系,2、与其它语言的不同Swift函数的参数类型包含了参数列表类型和返回值类型,例如(Double,Double)->Double是由2个Double类型参数列表和Double类型的返回值类型构成,也就是说Swift中函数名相同,参数列表不同或者返回值类型不同的函数都可以构成重载,而在C++

  5. swift中使用xib

    在OC时代,使用xib来管理界面很简单,但是swift下使用xib有点小复杂。由于项目需要,有一个view需要重复使用,storyboard无法满足需求,使用xib更为简便。总结一下swift中使用xib的注意事项:1.新建cocoatouchclass,xib的file‘sowner设置成对应controller2.由于swift不会自动override父类的init方法,所以如果只是按照第一步来做得话,会报错,因此,我们必须手动添加init方法:以上两个方法必须重载,至于默认构造函数最好也重载:

  6. Swift学习笔记(十二)构造过程

    默认构造器Swift将为所有属性已提供默认值的且自身没有定义任何构造器的结构体或基类,提供一个默认的构造器。构造器的继承和重载跟Objective-C中的子类不同,Swift中的子类不会默认继承父类的构造器。Swift的这种机制可以防止一个父类的简单构造器被一个更专业的子类继承,并被错误的用来创建子类的实例。

  7. swift 重载 泛式 inout的使用

    swift重载泛式inout的使用函数func关键字->表示返回值信息等等那我们接下来利用函数做几件事情-a比较两个数字的大小-b比较两个字符串-c既能比较字符串,又能比较数字a情况b情况c情况特殊之处就在于这个Equatableinout总之1.swift中重载传递的参数类型不同也可以重载2.范式可以更好的兼容数据类型,利于不同类型数据的比较3.inout可以再一个没有返回值的函数修改该函数的形

  8. Swift 2.0学习笔记Day 39——构造函数重载

    Swift中构造函数可以多个,他们参数列表和返回值可以不同,这些构造函数构成重载。构造函数代理在结构体和类中使用方式是不同,先介绍结构体中构造函数代理。将上一节的示例修改如下:将Rectangle声明为结构体类型,其中也有4个构造函数重载。这种在同一个类型中通过self.init语句进行调用当前类型其它构造函数,其它构造函数被称为构造函数代理。横向代理类似于结构体类型构造函数代理,发生在同一类内部,这种构造函数称为便利构造函数。

  9. Swift 中的 数组排序 和 重载运算符

    数组排序首先拿到一个数组,然后这个是按照数字中Item元素的name属性来排序的代码片段:这个使用的方法是sortInPlace,还有另外一个方法是sort。如果使用了sort,那么原来的数组是不会有任何变化的,使用sortInPlace,会在原来的数组上做修改。还可以简化为:第二种写法没有传统的括号(),使用$0来标记两个$1数组中的对象可读性很好,这是Swift的闭包中很好的一个特性。

  10. Swift 3.构造函数-重载构造函数

    ViewController.swiftPerson.swiftStudent.swift

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部