• <menu id="w2i4a"></menu>
  • logo Swift編程語言中文教程

    文檔首頁>>Swift編程語言中文教程>>Swift編程語言中文教程(二):運(yùn)算符

    Swift編程語言中文教程(二):運(yùn)算符


    1、基本運(yùn)算符

    運(yùn)算符是一種特定的符號或表達(dá)式,用來檢驗(yàn)、修改或合并變量。例如,用求和運(yùn)算符+可以對兩個數(shù)字進(jìn)行求和(如let i = 1 + 2);稍微復(fù)雜一點(diǎn)的例子有邏輯與操作符&& (如if enteredDoorCode && passedRetinaScan) ,自增長運(yùn)算符 ++i (這是i=i+1的簡寫方式)
    Swift支持C標(biāo)準(zhǔn)庫中的大多數(shù)運(yùn)算符并提升了各自的兼容性,從而可以排除常見的編碼錯誤!分配符 (=)不會返回一個值,這樣可以防止你因粗心將賦值運(yùn)算符 (=)寫成 (==)而引起的錯誤!算術(shù)符(+、 -、 *、 /、 % 等)會檢查與駁回值溢出,這樣可以避免值類型的數(shù)據(jù)在超過值類型所允許的存儲范圍時,出現(xiàn)意想不到的數(shù)據(jù)。你可以選擇使用Swift所提供的值溢出運(yùn)算符進(jìn)行量化溢出的行為,詳細(xì)見溢出操作符。
    與C語言不同,Swift允許你對浮點(diǎn)數(shù)執(zhí)行取余運(yùn)算。同時,Swift提供兩個范圍的運(yùn)算符 (a..b 和  a…b),作為表示一個數(shù)值范圍的簡寫方式,這點(diǎn)C不支持。
    本章節(jié)描述了Swift常見運(yùn)算符。高級運(yùn)算符覆蓋了Swift的高級操作符,并且對自定義操作符,對自定義類型操作符的實(shí)現(xiàn)進(jìn)行了描述。

    術(shù)語
    操作符都是一無、二元或三元:
    · 一元操作符操作單個對象 (如 -a)。一元前綴操作符出現(xiàn)在對象前(如 !b),一元后綴操作符在對象后出現(xiàn) (如 i++)。
    · 二元操作符操作兩個對象(如 2 + 3),并且操作符位于兩個元素中間。
    · 三元操作符對兩個對象進(jìn)行操作。與C一樣,Swift僅支持一個三元操作符:三元條件操作符 (a ? b : c).
    操作符所影響的值被稱為操作數(shù)。表達(dá)式1 + 2中,符號 + 是一個二元運(yùn)算符并且兩個操作數(shù)分別為 1 和 2。

    2、賦值運(yùn)算符
    賦值運(yùn)算符(a = b) 用b的值去初始化或更新a 的值

    let b = 10  var a = 5  a = b  // 此刻a的值為10

    假如右邊賦值的數(shù)據(jù)為多個數(shù)據(jù)的數(shù)組,它的元素可以是一次性定義的多個常量或變量

    let (x, y) = (1, 2)  // x等于1, 并且y等于2

    與C及Objective-C不同,Swift中賦值運(yùn)算符并不將自身作為一個值進(jìn)行返回。所以以下的代碼是不合法的:

    if x = y {  // 錯誤, 因?yàn)閤 = y并不會返回一個值  }

    此特性幫助你避免因粗心將賦值運(yùn)算符 (=)寫成 (==)而引起的錯誤。因?yàn)?if x = y 這樣寫是無效的。

    3、數(shù)學(xué)運(yùn)算符

    Swift支持所有數(shù)字類型的四個標(biāo)注運(yùn)算符:

    · 加法(+)

    · 減法(-)

    · 乘法(*)

    · 除法(/)

    例如:

    1 + 2 // equals 3  5 - 3 // equals 2  2 * 3 // equals 6  10.0 / 2.5 // equals 4.0

    不同于C和Objective-C,默認(rèn)情況下Swift的算術(shù)運(yùn)算符不允許值溢出。你可以通過Swift的溢出運(yùn)算符來選擇值的溢出情況(例如 a & + b)。詳見 Overflow Operators

    加法運(yùn)算符對字符串也一樣適用,例如:

    "hello, " + "world" // equals "hello, world"

    兩個字符,或者一個字符一個字符串,能組合成一個新的字符串:

    let dog: Character = "dog"(由于瀏覽器不能顯示狗的unicode圖像,故用三個字母代替……)  let cow: Character = "cow"(同上……)  let dogCow = dog + cow  // dogCow is equal to "dogcow"

    詳見Concatenating Strings and Characters

    余數(shù)運(yùn)算符

    余數(shù)運(yùn)算符(a % b)a是b的幾倍并且返回被留下的值(叫作余數(shù))。

    余數(shù)運(yùn)算符(%)亦稱是其他語言的一個模數(shù)運(yùn)算符。然而,其在Swift里意味著它是負(fù)數(shù),嚴(yán)格上講,是余數(shù)而不是模數(shù)運(yùn)算。

    這是余數(shù)運(yùn)算符如何工作。 要計(jì)算9% 4,你首先得求出9是4的幾倍 :

    Swift余數(shù)運(yùn)算符

    9能去除兩個4,并且余數(shù)是1 (顯示在橙色)。

    在Swift中,這個將被寫成:

    9 % 4 // equals

    確定a % b的答案, 運(yùn)算符%計(jì)算下列等式并且返回余數(shù)作為其輸出:

    a = (b × some multiplier) + remainder

    some multiplier 是a里面能包含b的最多倍數(shù)。

    將9和4插入到公式:

    9 = (4 × 2) + 1

    同一個方法是應(yīng)用的,當(dāng)計(jì)算a時的一個負(fù)值的余數(shù):

    · -9 % 4 // equals -1

    將-9和4插入到公式:

    -9 = (4 × -2) + -1

    產(chǎn)生余數(shù)值為-1。

    b為負(fù)值時的b的符號被忽略,這意味著%b和%-b的結(jié)果是一樣的。、

    浮點(diǎn)余數(shù)計(jì)算

    不同于C和Objective-C,Swift的余數(shù)運(yùn)算符也能運(yùn)用于浮點(diǎn)數(shù):

    · 8 % 2.5 // equals 0.5

    在本例中, 8用2.5來分等于3, 余數(shù)是0.5,因此余數(shù)為0.5。

    Swift余數(shù)運(yùn)算符

    增量和減量運(yùn)算符

    (自增和自減運(yùn)算符)

    像C一樣,Swift提供一個增量運(yùn)算符(++)和減量運(yùn)算符(–)作為增加或減少一個數(shù)字變量的值的快捷方式,數(shù)值為1。 您能使用有任何整數(shù)或浮點(diǎn)類型的變量使用這些運(yùn)算符。

    var i = 0     ++i // i now equals 1

    每當(dāng)你使用 ++i ,i 的值增加1,本質(zhì)上++i可以看做是i=i+1,同樣–i可以看做是i=i-1。

    ++和–符號可以使用作為前綴算符或作為后綴運(yùn)算符。++i 和 i++ 是兩個有效的方式給i的值增加1,同樣,–i和i—如是。

    注意這些運(yùn)算符修改i并且返回值。如果你只想要增加或減值i,您能忽略返回值。然而,如果你使用返回值,根據(jù)下列規(guī)則將是不同的根據(jù)的您是否使用了運(yùn)算符的前綴或后綴版本,它:

    · 如果運(yùn)算符在變量之前被寫,它在返回其值之前增加變量。

    · 如果運(yùn)算符在變量之后被寫,它在返回其值之后增加變量。

    例如:

    var a = 0  let b = ++a  // a and b are now both equal to 1  let c = a++  // a is now equal to 2, but c has been set to the pre-increment value of 1

    在上面的例子中,let b = ++a a在返回其值之前增加,這就是為什么a和b的新值是等于1。

    然而,let c = a++ a在返回其值之后增加,這意味著c獲得a的原值1,然后a自增,a等于2。

    除非你需要特定工作情況下,使用i++,在所有的情況下建議你使用++i和–,因?yàn)樗麄冇行薷膇和返回結(jié)果典型的期望的工作情況。

    一元減運(yùn)算符

    一個數(shù)值前加了符號-,叫作一元減運(yùn)算符:

    let three = 3  let minusThree = -three // minusThree equals -3  let plusThree = -minusThree // plusThree equals 3, or "minus minus three"

    一元減運(yùn)算符(-)直接地被加在前面,在它起作用的值之前,不用任何空白空間。

    一元加運(yùn)算符

    一元加運(yùn)算符(+)返回它起作用的值,不做任何變動:

    let minusSix = -6  let alsoMinusSix = +minusSix // alsoMinusSix equals -6

    雖然一元加上運(yùn)算符實(shí)際上不執(zhí)行什么,當(dāng)你也使用一元減負(fù)數(shù)的運(yùn)算符時,你能使用它提供對稱的正數(shù)。

    4、復(fù)合賦值操作符
    比較C,Swift提供復(fù)合賦值操作符把(=)賦值另一個運(yùn)算。舉個例子像加法賦值運(yùn)算符(+ =):

    var a = 1  a += 2  // a is now equal to 3  The expression a += 2 is shorthand for a = a + 2.

    能夠有效地加法和賦值組合到一個運(yùn)算,同時執(zhí)行這兩個任務(wù)。
    要注意的是,復(fù)合賦值操作符不返回值。例如,你不能寫讓成let b = + = 2,這種行為不同于上面提到的遞增和遞減運(yùn)算符。
    復(fù)合賦值運(yùn)算符的完整列表可以在Expressions那一章節(jié)找到

    5、比較運(yùn)算符
    Swift支持所有標(biāo)準(zhǔn)c的比較運(yùn)算符
    等于 (a == b)
    不等于(a != b)
    大于 (a > b)
    小于 (a < b)
    大于等于 (a >= b)
    小于等于(a <= b)
    備注
    Swift 提供兩個恒等運(yùn)算符(=== and !==),用它來測試兩個對象引用是否來自于同一個對象實(shí)例??捶诸惡徒Y(jié)構(gòu)獲得更詳細(xì)的信息。
    每個比較操作符返回一個Bool值來表示語句是否為真:

    1 == 1 // true, because 1 is equal to 1   2 != 1 // true, because 2 is not equal to 1   2 > 1 // true, because 2 is greater than 1   1 < 2 // true, because 1 is less than 2   1 >= 1 // true, because 1 is greater than or equal to 1   2 <= 1 // false, because 2 is not less than or equal to 1

    比較操作符通常用在條件語句,如if語句:

    let name = "world"   if name == "world" {   println("hello, world")   } else {   println("I'm sorry \(name), but I don't recognize you")   }   // prints "hello, world", because name is indeed equal to "world"

    想要了解更多有關(guān)的if語句,請參閱控制流。

    6、三元條件運(yùn)算符
    三元條件運(yùn)算符是一種特殊的運(yùn)算符 有三個部分,其形式為question? answer1:answer2.這是一個快捷方式用來評估兩種表達(dá)式基于問題是真或是
    假。如果question? 為真時,它評估answer1并返回其值;否則,它評估answer2并返回其值。三元條件運(yùn)算符是下面的代碼的簡化:

    if question {  answer1  } else {  answer2  }

    這里舉一個列子,計(jì)算一個表行像素的高度,行高應(yīng)該是50像素,比內(nèi)容要高度要高,如果行有一個頭,是20像素。如果行沒有頭:

    let contentHeight = 40  let hasHeader = true  let rowHeight = contentHeight + (hasHeader ? 50 : 20)  // rowHeight is equal to 90

    前面的例子可以用下面的的代碼:

    let contentHeight = 40  let hasHeader = true  var rowHeight = contentHeight  if hasHeader {  rowHeight = rowHeight + 50  } else {  rowHeight = rowHeight + 20  }  // rowHeight is equal to 90

    第一個例子使用的三元條件運(yùn)算符,意味著rowHeight可以設(shè)置為正確的值在一行代碼。這比第二個示例更簡潔,消除了需要for rowHeight一個變量,因?yàn)樗膬r值不需要修改在一個if語句。三元條件運(yùn)算符提供了一個高效的寫法,決定哪些需要考慮兩個表達(dá)式。不過還是請小心使用三元條件運(yùn)算符,其簡潔性如果過度使用會導(dǎo)致閱讀代碼更難。要避免多個實(shí)例的三元條件運(yùn)算符組合成一個復(fù)合語句。

    7、范圍運(yùn)算符
    Swift包含兩個范圍運(yùn)算符,能快捷的表達(dá)一系列的值
    封閉范圍運(yùn)算符
    封閉范圍運(yùn)算符(a…b)定義了一個范圍,從a到b,并包括a和b的值。
    循環(huán)訪問時,要在其中使用所有的值的范圍,范圍運(yùn)算符是一個非常有用的
    for-in循環(huán)

    for index in 1...5 {  println("\(index) times 5 is \(index * 5)")  }  // 1 times 5 is 5  // 2 times 5 is 10  // 3 times 5 is 15  // 4 times 5 is 20  // 5 times 5 is 25

    欲了解更多for-in循環(huán),請參閱控制流。
    半封閉的區(qū)域運(yùn)算符
    半封閉的區(qū)域運(yùn)算符(a..b)定義了從a到b的范圍,但不包括b。它被認(rèn)為是半封閉的,因?yàn)樗谝粋€值,而不包含最終值。半封閉的范圍使用明確,當(dāng)你使用從零開始的列表,如數(shù)組,它是有用的數(shù)到(但不包括)列表的長度:

    let names = ["Anna", "Alex", "Brian", "Jack"]  let count = names.count  for i in 0..count {  println("Person \(i + 1) is called \(names[i])")  }  // Person 1 is called Anna  // Person 2 is called Alex  // Person 3 is called Brian  // Person 4 is called Jack

    請注意,該數(shù)組包含四個項(xiàng)目,但0 . .數(shù)只數(shù)到3(數(shù)組中的最后一個項(xiàng)目的索引),因?yàn)樗且粋€半封閉的范圍。欲了解更多有關(guān)陣列,請參閱陣列

    8、邏輯運(yùn)算符
    邏輯運(yùn)算符修改或結(jié)合布爾邏輯值true和false。Swift支持這三個標(biāo)準(zhǔn)邏輯運(yùn)算符基于c語言:
    Logical NOT (!a)
    Logical AND (a && b)
    Logical OR (a || b)
    邏輯非運(yùn)算符
    邏輯非運(yùn)算符(!a)轉(zhuǎn)化一個Bollean值,以便true成為false,false變成true
    邏輯操作符是一個前綴操作符,并立即出現(xiàn)在它運(yùn)行的價值之前,沒有任何空白,它被解讀為”不是”,見下面的例子:

    let allowedEntry = false  if !allowedEntry {  println("ACCESS DENIED")  }  // prints "ACCESS DENIED"

    這句話if !allowedEntry 能理解為 “if not allowed entry.” 只執(zhí)行后續(xù)的行,如果“not allowed entry” 是 true; 那就是說 if allowedEntry
    是false.
    在這個例子中,精心挑選的布爾常量和變量名可以幫助保持代碼的可讀性和簡潔,同時避免雙重否定或混亂的邏輯語句。

    邏輯與運(yùn)算符

    創(chuàng)建邏輯與運(yùn)算符:(A && B),其中A和B兩個值必須同時為true時表達(dá)式才正確。

    其中A或者B有任一值是false時,邏輯與算符表示不成立、失敗。必須兩者同時為true、事實(shí)上,如果第一個值是false,第二個值甚至不會再進(jìn)行判斷,因?yàn)楸仨毷莾蓚€值皆為true、已經(jīng)有一方false、則沒必要再往下面進(jìn)行判斷了。

    以下這個例子判斷兩個Bool 類型的值,并只允許訪問,如果這兩個值都為真的時候會輸出:Welcome。失敗則相反:

    let enteredDoorCode = true  let passedRetinaScan = false  if enteredDoorCode && passedRetinaScan {      println("Welcome!")  } else {      println("ACCESS DENIED")  }  // prints "ACCESS DENIED”

    邏輯或運(yùn)算符
    表達(dá)式(a || b)運(yùn)算符中、只要a或者b有一個為true、則表達(dá)式正確。
    與上面的邏輯與運(yùn)算符相比,前者需要兩個都為true、而后者則只需要其中有一方為true達(dá)到標(biāo)準(zhǔn)則判斷表達(dá)式為正確。

    在下面的例子中,第一個布爾值(hasDoorKey)為false,但第二個值(knowsOverridePassword)為true。因?yàn)閮烧哂幸粋€值是true,整個表達(dá)式的計(jì)算結(jié)果也為true,正確輸出:Welcome!

    let hasDoorKey = false  let knowsOverridePassword = true  if hasDoorKey || knowsOverridePassword {  println("Welcome!")  } else {  println("ACCESS DENIED")  }  // prints "Welcome!"

    復(fù)合邏輯表達(dá)式
    你可以將多個邏輯運(yùn)算符復(fù)合來創(chuàng)建更長的復(fù)合表達(dá)式:

    if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {  println("Welcome!")  } else {  println("ACCESS DENIED")  }  // prints "Welcome!"

    相比于之前兩個單獨(dú)分開的運(yùn)算符。本次運(yùn)算符多重嵌套、將我們上面&&、|| 兩者運(yùn)算符相結(jié)合組合成一個較長的復(fù)合表達(dá)式??雌饋碛悬c(diǎn)饒人、其實(shí)本質(zhì)還是兩兩相比較、可以簡單地看成A && B || C || D、從左往右根據(jù)運(yùn)算符優(yōu)先級進(jìn)行判斷、注意區(qū)分開&&、||、只要牢記運(yùn)算邏輯&&需要兩者都為true、||則只需要一方為true則運(yùn)算符正確即可解析整個復(fù)合表達(dá)式、透過現(xiàn)象看本質(zhì)。

    明確地括號(翻譯成中文語句不連貫太特么饒人了、怒了自己寫理解。)
    復(fù)合表達(dá)式中,我們可以添加進(jìn)()、更加明確邏輯意圖:

    if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {  println("Welcome!")  } else {  println("ACCESS DENIED")  }  // prints "Welcome!"

    在復(fù)合邏輯表達(dá)式中、我們可以使用括號明確地表示我們需要將幾個值放在一個單獨(dú)的邏輯運(yùn)算中去判斷得出結(jié)果、最后根據(jù)()內(nèi)的結(jié)果再去與后面的值進(jìn)行判斷、看上面的例子、就像我們小學(xué)學(xué)加減乘除一樣、如果沒有括號()我們肯定是按照運(yùn)算符的優(yōu)先級去判斷、但此時有了括號、我們需要先運(yùn)算其中的邏輯運(yùn)算符得到它們的值.使用括號()在符合邏輯表達(dá)式中可以更明確的你的意圖。

    本文資源來自互聯(lián)網(wǎng),由本網(wǎng)整理編輯,供大家學(xué)習(xí)參考。因?yàn)榧夹g(shù)有限,可能會有不足及錯誤,請大家指正。

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();