Swift教程之基本操作符

2022-08-24 23:27:12 字數 3824 閱讀 4955

本章介紹swift中的常見操作符,並介紹使用自定義操作符實現複雜運算。

## 術語

操作符包括一元、二元和三元運算子:

## 賦值運算子

簡單賦值運算:

let b = 10

var a = 5

a = b

元組賦值運算:

let (x, y) = (1, 2)

// x 等於 1, y 等於 2

與c和objective-c不同的是,swift的賦值運算子不返回該值,使得賦值運算子不可在if語句中作條件判斷:

if x = y
這個特性能避免在**中將==寫作=

## 算術運算子

swift支援加(**+**)、減(**-**)、乘(**\***)、除(**/**)四種數值運算。

與c和object-c不同,swift的算術運算子不允許值溢位,可選擇溢位運算子(如&+b)對溢位選值。

加法運算子(+)可用在string中:

"hello, " + "world"  // 等於 "hello, world"
let three = 3

let minusthree = -three

let plusthree = -minusthree

當和一元減法運算子一起使用時,可讓**更加對稱。

var a = 1

a += 2

// a 等於 3

注意

符合賦值運算子不返回任何值

## 比較運算子

標準c比較運算子

注意

==!==運算子用於判斷兩個物件是否引用同乙個例項物件。

比較運算子常用於條件語句:

let name = "world"

if name == "world" else

// prints "hello, world", because name is indeed equal to "world".

邏輯運算子可用於對元組型別的比較,從左到右依次比較:

(4, "dog") == (4, "dog") // true because 4 is equal to 4, and "dog" is equal to "dog"

只有當元組的每個元素能夠應用該操作符時才能進行比較:

("blue", -1) < ("purple", 1)        // ok, evaluates to true

("blue", false) < ("purple", true) // error because < can't compare boolean values

注意

swift標準庫只能對少於7個元素的元組使用比較運算子,否則必須自己實現比較運算子。

## 三元條件運算子

三元條件運算子(question ? answer1 : answer2)是以下**的縮寫:

if question  else
三元條件運算子應謹慎使用,避免三元條件運算子的巢狀使用,這樣會使**可讀性降低。

## nil合併運算子

nil合併運算子(**a ?? b**)表明若可選型別**a**不為nil,則返回a的強制解包值,否則返回預設值b。

nil合併運算子是以下**的縮寫:

a != nil ? a! : b
nil合併運算子用於給可選型別設定預設值:

let defaultcolorname = "red"

var userdefinedcolorname: string? // 預設為 nil

var colornametouse = userdefinedcolorname ?? defaultcolorname

## 範圍運算子

範圍運算子是範圍值的縮寫形式。閉合範圍運算子(a...b)表示包含a和b的從a到b的一系列整數值。

閉合範圍運算子常用於迭代:

for index in 1...5
半開範圍運算子(a..半開範圍運算子常用於集合型別的迭代:

let names = ["anna", "alex", "brian", "jack"]

let count = names.count

for i in 0..單邊範圍忽略了雙邊範圍的某一邊,常用於陣列元素遍歷,如:

for name in names[2...]

for name in names[...2]

單邊範圍運算子也與半開範圍形式,但是該單邊必須在末尾,因為迭代起始不清楚,如:

for name in names[..<2]
單邊範圍也可用於判斷是否包含特定值:

let range = ...5

range.contains(7) // false

range.contains(4) // true

range.contains(-1) // true

## 邏輯運算子

邏輯運算子與布林值一起使用,有三種基本邏輯運算子:邏輯非運算子反轉布林值:

let allowedentry = false

if !allowedentry

仔細選擇布林常量和變數名可以幫助保持**的可讀性和簡潔性,同時避免雙重否定或混亂的邏輯語句。

邏輯與運算子與c語言相同,也會出現短路現象。

let entereddoorcode = true

let passedretinascan = false

if entereddoorcode && passedretinascan else

邏輯或運算子也有短路現象。

let hasdoorkey = false

let knowsoverridepassword = true

if hasdoorkey || knowsoverridepassword else

使用組合邏輯運算子構建複雜的邏輯表示式:

if entereddoorcode && passedretinascan || hasdoorkey || knowsoverridepassword  else
注意

邏輯與和邏輯與是左結合運算子,組合邏輯表示式會首先評估最左邊的子表示式。

在組合邏輯運算子中適當使用括號可提供**的可讀性並保持意圖清晰。

if (entereddoorcode && passedretinascan) || hasdoorkey || knowsoverridepassword  else

Swift教程之運算子

import foundation 4 復合賦值操作符 var a 1 a 2 一元減運算子 乙個數值前加了符號 叫作一元減運算子 let three 3 let minusthree three minusthree 3 let plusthree minusthree plusthree 3 一...

Swift教程之運算子

import foundation 4 復合賦值操作符 var a 1 a 2 一元減運算子 乙個數值前加了符號 叫作一元減運算子 let three 3 let minusthree three minusthree 3 let plusthree minusthree plusthree 3 一...

Swift 四 基本運算子及高階操作符

1 swift入門學習筆記 第一版 對swift的基礎知識點進行梳理總結。知識點一直在變,只是作為參考,以蘋果官方文件為準 2 在學習完基本的知識點以後會結合官方文件及相關資料,在此版本的基礎上進行新增更改。swift 支援大部分標準 c 語言的運算子,且改進許多特性來減少常規編碼錯誤 賦值符 不返...