Swift(三)基本運算符

Swift支持大部分標準C語言的運算符,而且對許多特性進行改進來減小常規編碼的錯誤。除了支持基本運算符外,Swift還提供了2個特殊的運算符,分別是:溢出運算符區間運算符swift

首先看下基本運算符ide

import UIKit

var str = "Hello, playground"

/**
 賦值運算符
 1. 注意⚠️:與C語言和OC不一樣,Swift的賦值操做並不返回任何值。
    這個特性是你沒法把(==)錯寫成 (=)
 */
let b = 10
var a = b
//if a = b {
//    // c這樣寫錯誤,由於 a = b 並不返回任何值
//}

/**
 算術運算符
 1.Swift中全部數值類型都支持基本的四則算術運算符
 2.注意⚠️:swift默認狀況下不容許在數值計算中出現溢出狀況。可使用溢出運算符實現溢出計算
 3.加法運算符 也可用於 String的拼接
 */
print(1 + 2)
print(10 - 3)
print(3 * 7)
print(27.0 / 3.0)
print("hello, " + "world") // "hello, world"

/**
 求餘運算符
 1. a % b 求餘運算符 % 在有的語言中也叫 取模運算符
 2. 在對負數b求餘時,b的符號會被忽略。這意味着 a % b 和 a % -b的結果相同
 */
print(9 % 4)// 等於1
print(-9 % 4)// 等於-1
print(9 % -4)// 等於1

/**
 一元負號運算符
 */
let four = 4
let tempFour = -four

/**
 一元正號運算符
 該運算符 不作任何改變地返回操做數的值
 */
let mSix = -6
let alsoMsix = +mSix// 等於 -6

/**
 組合運算符
 將其它運算符和賦值運算符(=)組合的f組合運算符
 注意⚠️:複合賦值運算符沒有返回值 let m = n += 4 這類代碼是錯誤
 */
var n = 2
n += 3
print(n)

//let m = n += 5
//print(m)// 結果是 ()

/**
 比較運算符
 1. 全部標準C語言中的比較運算符均可以在Swift中使用
 2. 每一個比較運算符返回了一個標識表達式是否成立的布爾值
 3. swift提供了恆等(===)和不恆等(!==)這兩個比較符來判斷兩個對象是否
    引用同一個對象實例
 4. 元組比較:若是兩個元組的元素相同,且長度相同的話,元組就能夠被比較
            比較元組大小會按照從左到右、逐值比較的方式,知道發現兩個值不等時中止
            若是全部的值都相等,那麼這一對元組就相等
    注意⚠️:swift標準庫只能b比較7個之內元素的元組比較
 */
print(2 != 1)// true
print((1, "dog") < (3, "banner"))// true 由於1小於3,因此整個元組就是小於的,無論元組剩下的值如何
print((4, "dog") < (4, "banner"))// false 當異地個元素相同的時候,第二個元素就會用作比較

/**
 三目運算符
 */
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 30)

/**
 空合運算符
 a ?? b 將對可選類型a進行空判斷,若是a包含一個值就進行解封,不然返回一個默認值b
 注意⚠️:表達式a必須是可選類型。默認值b的類型必須和a類型一致
 */
let defaultColorName = "red"
var userDefinedColorName: String?// 默認值爲nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
print(colorNameToUse)
userDefinedColorName = "blue"
colorNameToUse = userDefinedColorName ?? defaultColorName
print(colorNameToUse)

/**
 邏輯運算符
 邏輯運算符的操做對象是邏輯布爾值。
 邏輯非 (!a)
 邏輯與(a && b)
 邏輯或(a || b)
 */
let allowedEntry = false
if !allowedEntry {
    print("ACCESS DENIED")
}

let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}

let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
View Code

區間運算符編碼

/**
 1. 閉區間運算符
 (a...b)定義一個包含從a到b的全部值的區間,a值不能超過b
 */
for index in 1...6 {
    print(index)// 1 2 3 4 5 6
}
/**
 2. 半開區間運算符
 (a..<b)定義一個包含從a到b但不包括b的區間
 */
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
    print("第 \(i + 1) 我的叫 \(names[i])")
}
/**
 3. 單側區間
 能夠表達往一側無限延伸的區間
 */
for name in names[2...] {
    print(name)// Brian Jack
}

溢出運算符spa

//溢出運算符
var am = UInt8.max //am = 255
//Error: -> var b:UInt8 = am + 1 //注意b會出現溢出,此句報錯
//下面使用溢出運算符,結果爲:0
var bm:UInt8 = UInt8(a &+ 1)
//相似的還有&-、&*、&/,使用溢出運算符能夠在最大值和最小值以前循環而不會報錯,下面c的值爲255
var c:UInt8 = UInt8(bm &- 1)
相關文章
相關標籤/搜索