1. 程式人生 > >iOS swift運算子詳解

iOS swift運算子詳解

Swift支援C標準庫中的大多數運算子並提升了各自的相容性,從而可以排除常見的編碼錯誤。賦值操作符 (=)不會返回一個值,這樣可以防止你因粗心將賦值運算子 (=)寫成 (==)而引起錯誤。算術符(+、 -、 *、 /、 % 等)會檢查與駁回值溢位,這樣可以避免值型別的資料在超過值型別所允許的儲存範圍時,出現意想不到的資料。你可以選擇使用Swift所提供的值溢位運算子進行量化溢位的行為,詳細見溢位操作符

與C語言不同,Swift允許你對浮點數執行取餘運算。同時,Swift提供兩個範圍的運算子 (a..b 和 a…b),作為表示一個數值範圍的簡寫方式,這點C不支援。

本章節描述了Swift常見運算子。

高階運算子覆蓋了Swift的高階操作符,並且對自定義操作符,對自定義型別操作符的實現進行了描述。

術語

操作符都是一元、二元或三元:

  • 一元操作符操作單個物件 (如 -a)。一元字首操作符出現在物件前(如 !b),一元后綴操作符在物件後出現 (如 i++)。
  • 二元操作符操作兩個物件(如 2 + 3),並且操作符位於兩個元素中間。
  • 三元操作符對兩個物件進行操作。與C一樣,Swift僅支援一個三元操作符:三元條件操作符 (a ? b : c).

操作符所影響的值被稱為運算元。表示式1 + 2中,符號 + 是一個二元運算子並且兩個運算元分別為 1 和 2。

賦值運算子

賦值運算子(a = b) 用b的值去初始化或更新a 的值

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

假如右邊賦值的資料為多個數據的元組,它的元素可以是一次性賦給的多個常量或變數

let (x, y)=(1,2)// x等於1, 並且y等於2

與C及Objective-C不同,Swift中賦值運算子並不將自身作為一個值進行返回。所以以下的程式碼是不合法的:

if x = y {// 錯誤, 因為x = y並不會返回一個值}

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

數學運算子

Swift支援所有數字型別的四個標註運算子:

  • 加法(+) *減法(-)
  • 乘法(*)
  • 除法(/)

例如:

1+2// equals 35-3// equals 22*3// equals 610.0/2.5// equals 4.0

不同於C和Objective-C,預設情況下Swift的算術運算子不允許值溢位。你可以通過Swift的溢位運算子來選擇值的溢位情況(例如 a & + b)。詳見 Overflow Operators

加法運算子對字串連線也一樣適用,例如:

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

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

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

取餘運算子

取餘運算子(a % b)計算出a是b的幾倍然後返回被留下的值(餘數)。

注:餘數運算子(%)亦稱是其他語言的一個取模運算子。然而,其在Swift裡意味著如果對負數操作,嚴格上講,得到的是餘數而不是模數。

這是餘數運算子如何工作。 要計算9% 4,你首先得求出9是4的幾倍 :

reminder

9能去除兩個4,並且餘數是1 (顯示在橙色)。

在Swift中,這個將被寫成:

9%4// equals

確定a % b的答案, 運算子%計算下列等式並且返回餘數作為其輸出:

a =(b × some multiplier)+ remainder

some multiplier 是a裡面能包含b的最多倍數。

將9和4插入到公式:

9=(4×2)+1

同一個方法是應用的,當計算a時的一個負值的餘數:

-9%4// equals -1

將-9和4插入到公式:

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

產生餘數值為-1。

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

浮點餘數計算

不同於C和Objective-C,Swift的餘數運算子也能運用於浮點數:

8%2.5// equals 0.5

在本例中, 8用2.5來分等於3, 餘數是0.5,因此餘數為0.5。

float reminder

自增和自減運算子

像C一樣,Swift提供一個自增運算子(++)和自減運算子(–)作為增加或減少一個數值的一種快捷方式,增減量為1。 您能對任何整數或浮點型別的變數使用這些運算子。

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

每當你使用 ++i ,i 的值增加1,本質上++i可以看做是i=i+1,同樣–i可以看做是i=i-1。

++和–符號可以使用作為字首算符或作為字尾運算子。++i 和 i++ 是兩個有效的方式給i的值增加1,同樣, –i和i–如是。

注意這些運算子修改i並且返回值。如果你只想要增加或減值i,您可以忽略返回值。然而,如果你使用返回值,根據下列規則將是不同的根據的您是否使用了運算子的字首或字尾版本,它:

  • 如果運算子在變數之前被寫,它在返回其值之前增加變數。
  • 如果運算子在變數之後被寫,它在返回其值之後增加變數。

例如:

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和–i, 因為他們修改i並返回值的行為符合我們的預期。

一元減運算子

一個數值前加了符號-,叫作一元減運算子:

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

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

一元加運算子

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

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

雖然一元加上運算子實際上不執行什麼,當你也使用一元減負數的運算子時,你能使用它提供對稱的正數。

複合賦值操作符

Swift提供類似C語言的複合賦值操作符,即把賦值和另一個運算合併起來。舉個例子,像加法賦值運算子(+ =):

var a =1
a +=2// a is now equal to 3

表示式 a += 2 比 a = a + 2更精煉。加法賦值運算子能夠有效地把加法和賦值組合到一個運算,同時執行這兩個任務。

相關推薦

iOS swift運算子

Swift支援C標準庫中的大多數運算子並提升了各自的相容性,從而可以排除常見的編碼錯誤。賦值操作符 (=)不會返回一個值,這樣可以防止你因粗心將賦值運算子 (=)寫成 (==)而引起錯誤。算術符(+、 -、 *、 /、 % 等)會檢查與駁回值溢位,這樣可以避免值型別的資料在超過值型別所允許的儲存範圍時

iOS繪圖CGContextRef

單獨 tsa 我們 分享 繪制線 cloc tcl attr 舉例 轉自:http://blog.csdn.net/u014286994/article/details/51333118 /* CoreGraphics - CGContext.h */ /** Grap

JavaScript中的邏輯運算子

今天我們來總結一下Js中的三種邏輯運算子:與 &&     或 ||     非 ! &&操作符 (全真為真,有假則假)。​​​​​ "與" 翻譯過來就是並且的意思,只有當條件1到條件n都滿足,結果才成立。

java 的位運算子例項 ------與(&) 、或( |) 、非( ~) 、異或( ^)

位運算子主要針對二進位制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算子,但邏輯運算子是針對兩個關係運算符來進行邏輯運算,而位運算子主要針對兩個二進位制數的位進行邏輯運算。下面詳細介紹每個位運算子。   1.與運算子 與運算子用符號“&”表示,

iOS AppDelegate 代理(啟動,開啟App,推送,通知)

//App將要啟動 - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(nullable NSDictionary *)launchOptions{ return YES;

New運算子

三種new運算子: new運算子做的三件事:獲得一塊記憶體空間、呼叫建構函式、返回正確的指標 1、new 分配記憶體,呼叫建構函式,定義如下: void* operator new(std::size_t) throw(std::bad_alloc); void operator

java的邏輯運算子和位運算子

邏輯運算子 運算子 用法 含義 說明 優先順序 ! !x 邏輯非 當運算元是false返回true;當運算元是true時返回false

js中的 || 與 && 運算子

這篇文章主要介紹了js中的 || 與 && 運算子詳解,需要的朋友可以參考下 一 js中邏輯運算子在開發中可以算是比較常見的運算子了,主要有三種:邏輯與&&、邏輯或||和邏輯非!。 當&&和|| 連線語句時,兩邊的語句會轉化為布林型

Java 運算子

Java 運算子詳解 1.位運算子 1.1 按位右移補零操作符 >>> ,後面跟指定的移動位數n。然後移動之後的左邊的位數按照0填補。 1.2 實戰案例 程式碼 public static void test13(){

IOS內購

介紹 最近開發的一款APP上架被駁回了,理由是: 上架的APP是培訓類,裡面金牌視訊課程需要購買,Android端使用支付寶,微信支付。 蘋果規定 數字化內容、App功能以及服務等,需要使用內購 真實世界中的服務(如一個俱樂部的會員資格)或物品(食物、衣物等

【java基礎】++ -- 運算子

++ -- 運算子詳解 ## 關於自增自減運算的問題《java程式設計思想》中是這樣說的: a、(i++,i--)運算子在運算元後面,先賦值,再運算 b、(++i, --i)運算子在運算元前面,先運算,再賦值 例: int i = 1; System.out.println(i-- - ++

js中的 || 與 && 運算子

這篇文章主要介紹了js中的 || 與 && 運算子詳解,需要的朋友可以參考下 一 js中邏輯運算子在開發中可以算是比較常見的運算子了,主要有三種:邏輯與&&、邏輯或||和邏輯非!。 當&&和|| 連線語句時,兩邊的

【Android】Android開發實現帶有反彈效果,仿IOS反彈scrollview教程

作者:程式設計師小冰,GitHub主頁:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先給大家看一下我們今天這個最終實現的效果圖: 這個是ios中的反彈效果。當然我

iOS塊語法(block程式設計)

——譯自Apple Reference Library《Blocks Programming Topic》 簡介 塊物件是C語言的句法和執行時特性。它類似於標準C函式,但可以將程式碼、變數繫結到堆(heap)、棧(stack)。一個塊還維護了一系列的狀態,這些狀態或資料

IOS UIScrollView——用法

UIScrollView是用來在螢幕上顯示那些在有限區域內放不下的內容。例如,在手機螢幕上顯示內容豐富的網頁或者很大的圖片。在這種情況下,需要使用者對螢幕內容進行拖動或縮放來檢視螢幕或視窗區域外的內容。 所以,ScrollView應該首先有一個視窗,用來顯示內容,其次,還要

異或運算子(^)

有一次面試 要求寫一個冒泡演算法   本來沒有什麼 但是我的冒泡 寫的比較特別   不多說上原始碼 // ..... public static void bubbleSort(int[] arr) {   if (arr == null || arr.len

iOS開發-Runtime

簡介 Runtime 又叫執行時,是一套底層的 C 語言 API,其為 iOS 內部的核心之一,我們平時編寫的 OC 程式碼,底層都是基於它來實現的。比如: [receiver message]; // 底層執行時會被編譯器轉化為: objc_msgSend(recei

Java的位運算子例項

Java的位運算子詳解例項——與(&)、非(~)、或(|)、異或(^) 位運算子主要針對二進位制,它包括了:“與”、“非”、“或”、“異或”。從表面上看似乎有點像邏輯運算子,但邏輯運算子是針對兩個關係運算符來進行邏輯運算,而位運算子主要針對兩個二進位制數的位進行邏輯運算。下面詳細

IOS NSString 用法

//NSString 操作均不改變自身值 //構建字串 NSString *szTmp = @"A string"; //直接賦值 szTmp = nil; int n = 5; NSString *szMyString = [NSStr

C++過載運算子

結構體基礎 結構體,是一種可以自己編寫資料型別(如int,double等)的一種資料集合,宣告關鍵字struct,框架(聲明於main之外): struct 名稱 { 集合之中的變數 };//分號一定不要忘了 例如: struct stu