swift学习笔记之运算符重载

前端之家收集整理的这篇文章主要介绍了swift学习笔记之运算符重载前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
/** * 今天我们来谈一谈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相关文章