Swift運(yùn)算符使用方法淺析
溢出運(yùn)算符(Overflow Operator)
1、Swift的算數(shù)運(yùn)算符出現(xiàn)溢出時會拋出運(yùn)行時錯誤
var v: UInt8 = UInt8.min v -= 1
2、Swift有溢出運(yùn)算符(&+、&-、&*),用來支持溢出運(yùn)算
var v1 = UInt8.min var v2 = v1 &- 1 //v2 = 255
var v1 = UInt8.max var v2 = v1 &* 2 // 等價于 v1 &+ v1
運(yùn)算符重載(Operator Overload)
1、類、結(jié)構(gòu)體、枚舉可以為現(xiàn)有的運(yùn)算符提供自定義的實(shí)現(xiàn),這個操作叫做:運(yùn)算符重載
struct Point {
var x = 0, y = 0
static func + (p1: Point, p2: Point) -> Point {
Point(x: p1.x + p2.x, y: p1.y + p2.y)
}
static prefix func - (p: Point) -> Point {
Point(x: -p.x, y: -p.y)
}
static func += (p1: inout Point, p2: Point) {
p1 = p1 + p2
}
static postfix func ++ (p: inout Point) -> Point {
let tmp = p
p += Point(x: 1, y: 1)
return tmp
}
static prefix func ++ (p: inout Point) -> Point {
p += Point(x: 1, y: 1)
return p
}
}
var p1 = Point(x: 10, y: 20)
var p2 = Point(x: 11, y: 22)
let p3 = p1 + p2
let p4 = -p3
print(p4)Equatable
1、要想得知2個實(shí)例是否等價,一般做法是遵守Equatable協(xié)議,重載 == 運(yùn)算符
與此同時,等價于重載了 != 運(yùn)算符
class Person: Equatable {
var age: Int
init(age: Int) {
self.age = age
}
static func == (lhs: Person, rhs: Person) -> Bool {
lhs.age == rhs.age
}
}
var p1 = Person.init(age: 10)
var p2 = Person(age: 11)
print(p1 == p2)2、Swift為以下類型提供默認(rèn)的Equatable實(shí)現(xiàn)
沒有關(guān)聯(lián)類型的枚舉
只擁有遵守Equatable協(xié)議關(guān)聯(lián)類型的枚舉
只擁有遵守Equatable協(xié)議存儲屬性的結(jié)構(gòu)體
enum Answer {
case wrong
case right
}
var s1 = Answer.wrong
var s2 = Answer.right
print(s1 == s2)3、引用類型比較存儲的地址值是否相等(是否引用著同一個對象),使用恒等運(yùn)算符 === 、!==
Comparable
1、要想比較2個實(shí)例的大小,一般做法是:遵守Comparable協(xié)議,重載相應(yīng)的運(yùn)算符
自定義運(yùn)算符 (Custom Operator)
1、可以自定義新的運(yùn)算符:在全局作用域使用operator進(jìn)行聲明
prefix operator 前綴運(yùn)算符
postfix operator 后綴運(yùn)算符
infix operator 中綴運(yùn)算符:優(yōu)先級組
precedencegroup 優(yōu)先級組 {
associativity: 結(jié)合性(left/right/none)
higherThan: 比誰的優(yōu)先級高
lowerThan: 比誰的優(yōu)先級低
assignment: true代表在可選鏈操作中擁有跟賦值運(yùn)算符一樣的優(yōu)先級
}prefix operator +++
prefix func +++ (_ i: inout Int) {
i += 2
}
var age = 10
+++ageinfix operator +-: PlusMinusPrecedence
precedencegroup PlusMinusPrecedence {
associativity: none
higherThan: AdditionPrecedence
lowerThan: MultiplicationPrecedence
assignment: true
}
struct Point {
var x = 0, y = 0
static func +- (p1: Point, p2: Point) -> Point {
Point(x: p1.x + p2.x, y: p1.y - p2.y)
}
}
class Person {
var age = 0
var point: Point = Point()
}
var p: Person? = Person()
p?.point +- Point(x: 10, y: 20)到此這篇關(guān)于Swift運(yùn)算符使用方法淺析的文章就介紹到這了,更多相關(guān)Swift運(yùn)算符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解在swift中實(shí)現(xiàn)NSCoding的自動歸檔和解檔
本篇文章主要介紹了在swift中實(shí)現(xiàn)NSCoding的自動歸檔和解檔,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
Swift 3.0將UILabel數(shù)字顏色設(shè)置為紅色的方法
這篇文章主要介紹了關(guān)于在Swift中將UILabel數(shù)字顏色設(shè)置為紅色的方法,文中給出了詳細(xì)的示例代碼,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03
利用swift實(shí)現(xiàn)卡片橫向滑動動畫效果的方法示例
卡片橫向滑動動畫效果相信對大家來說都不陌生,下面這篇文章主要給大家介紹了關(guān)于利用swift實(shí)現(xiàn)卡片橫向滑動動畫效果的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-07-07
Swift操作Quartz 2D進(jìn)行簡單的繪圖與坐標(biāo)變換的教程
這篇文章主要介紹了Swift操作Quartz 2D進(jìn)行簡單的繪圖與坐標(biāo)變換的教程,Quartz 2D是Core Graphics框架中的一個重要組件,經(jīng)常被Mac OS或和iOS開發(fā)者用來繪圖,需要的朋友可以參考下2016-04-04

