Swfi基礎(chǔ)1

Swift不要求在每行語句的結(jié)尾使用分號(;),但當(dāng)你在同一行書寫多條語句時,必須用分號隔開 :

var myString="Hello, World!";print(myString)

Optional 是一個含有兩種情況的枚舉,None和Some(T)漆腌,用來表示可能有或可能沒有值。任何類型都可以明確聲明為(或者隱式轉(zhuǎn)換)可選類型阶冈。當(dāng)聲明一個可選類型的時候,要確保用括號給塑径?操作符一個合適的范圍女坑。例如,聲明可選整數(shù)數(shù)組统舀,應(yīng)該寫成([Int])?匆骗;寫成Int[]?會報錯劳景。

整型字面量

整型字面量可以是一個十進制,二進制碉就,八進制或十六進制常量盟广。 二進制前綴為 0b,八進制前綴為 0o瓮钥,十六進制前綴為 0x筋量,十進制沒有前綴:
以下為一些整型字面量的實例:

let decimalInteger=17         // 17 - 十進制表示 
let binaryInteger=0b10001     // 17 - 二進制表示
let octalInteger=0o21         // 17 - 八進制表示
let hexadecimalInteger=0x11   // 17 - 十六進制表示

1.25e2 表示 1.25 ? 10^2,也就是 125.0碉熄;同樣桨武,1.25e-2 表示 1.25 ? 10^-2,也就是 0.0125锈津。

字符串型字面量

字符串型字面量由被包在雙引號中的一串字符組成呀酸,形式如下:
"characters"
字符串型字面量中不能包含未轉(zhuǎn)義的雙引號 (")、未轉(zhuǎn)義的反斜線(\)琼梆、回車符或換行符性誉。
轉(zhuǎn)移字符含義

\0空字符
\\反斜線 \
\b退格(BS) ,將當(dāng)前位置移到前一列
\f換頁(FF)茎杂,將當(dāng)前位置移到下頁開頭
\n換行符
\r回車符
\t水平制表符
\v垂直制表符
\'單引號
\"雙引號
\0001到3位八進制數(shù)所代表的任意字符
\xhh...1到2位十六進制所代表的任意字符

以下為字符串字面量的簡單實例:

let stringL="Hello\tWorld\n\n全棧教程官網(wǎng):\'http://www.jser.com\'"
print(stringL)

以上程序執(zhí)行結(jié)果為:

Hello   World
全棧教程官網(wǎng):'http://www.jser.com'

控制語句描述

continue 語句
告訴一個循環(huán)體立刻停止本次循環(huán)迭代错览,重新開始下次循環(huán)迭代。
break 語句
中斷當(dāng)前循環(huán)蛉顽。
fallthrough 語句
如果在一個case執(zhí)行完后蝗砾,繼續(xù)執(zhí)行下面的case,需要使用fallthrough(貫穿)關(guān)鍵字携冤。

字符串函數(shù)及運算符

Swift 支持以下幾種字符串函數(shù)及運算符:

**isEmpty:**判斷字符串是否為空悼粮,返回布爾值
**hasPrefix(prefix: String):**檢查字符串是否擁有特定前綴
**hasSuffix(suffix: String):**檢查字符串是否擁有特定后綴。
**Int(String):**轉(zhuǎn)換字符串?dāng)?shù)字為整型曾棕。 實例:
let myString: String = "256"
let myInt: Int? = Int(myString)
**String.characters.count:**計算字符串的長度

遍歷字符串中的字符

Swift 的 String 類型表示特定序列的 Character(字符) 類型值的集合扣猫。 每一個字符值代表一個 Unicode 字符。
您可通過for-in循環(huán)來遍歷字符串中的characters屬性來獲取每一個字符的值:
for ch in"Hello".characters { print(ch) }

創(chuàng)建數(shù)組

以下實例創(chuàng)建了一個類型為 Int 翘地,大小為 3申尤,初始值為 0 的空數(shù)組:

var someInts = [Int](count: 3, repeatedValue: 0)
var someStrs=[String()
someStrs.append("Apple")
someStrs+=["Google"]
// enumerate() 以元組的形式遍歷數(shù)組
for (index, item) in someStrs.enumerate() {print("在 index = \(index) 位置上的值為 \(item)")}
可以通過只讀屬性 isEmpty 來判斷數(shù)組是否為空

移除 Key-Value 對

我們可以使用removeValueForKey()方法來移除字典 key-value 對。如果 key 存在該方法返回移除的值衙耕,如果不存在返回 nil 昧穿。實例如下:

var someDict:[ Int : String]=[1:"One",2:"Two",3:"Three"]
var removedValue=someDict.removeValueForKey(2)

遍歷字典

我們可以使用for-in循環(huán)來遍歷某個字典中的鍵值對。實例如下:

var someDict:[Int: String]=[1:"One",2:"Two",3:"Three"]
for ( key, value) in someDict {print("字典 key \(key) -  字典 value \(value)")}

使用只讀的count屬性來計算字典有多少個鍵值對
通過只讀屬性isEmpty來判斷字典是否為空
輸入輸出函數(shù)
定義一個輸入輸出參數(shù)時橙喘,在參數(shù)定義前加 inout 關(guān)鍵字时鸵。一個輸入輸出參數(shù)有傳入函數(shù)的值,這個值被函數(shù)修改,然后被傳出函數(shù)饰潜,替換原來的值初坠。

fun cswapTwoInts (inouta: Int, inoutb: Int){
    let = a
    a = b
    b = t
}
var x =0,y =100
print("x =\(x) ;y =\(y)")

swapTwoInts(&x, b:&y)
print("x =\(x) ;y =\(y)")

函數(shù)嵌套

函數(shù)嵌套指的是函數(shù)內(nèi)定義一個新的函數(shù),外部的函數(shù)可以調(diào)用函數(shù)內(nèi)定義的函數(shù)彭雾。
實例如下:

func calcDecrement(forDecrement total:Int)->()->Int{
    var overallDecrement=0
    func decrementer()->Int{
        overallDecrement-=total
        return overallDecrement
   }
    return decrementer
}
let decrem=calcDecrement(forDecrement:30)
print(decrem())

以上程序執(zhí)行輸出結(jié)果為:

-30
sort 函數(shù)

sort(:)方法會返回一個與原數(shù)組大小相同,包含同類型元素且元素已正確排序的新數(shù)組碟刺,原數(shù)組不會被sort(:)方法修改。
sort(_:)方法需要傳入兩個參數(shù):
1.已知類型的數(shù)組
2.閉包函數(shù)薯酝,該閉包函數(shù)需要傳入與數(shù)組元素類型相同的兩個值半沽,并返回一個布爾類型值來表明當(dāng)排序結(jié)束后傳入的第一個參數(shù)排在第二個參數(shù)前面還是后面。如果第一個參數(shù)值出現(xiàn)在第二個參數(shù)值前面蜜托,排序閉包函數(shù)需要返回true抄囚,反之返回false。
實例

let names=["AT","AE","D","S","BE"]
// 使用普通函數(shù)(或內(nèi)嵌函數(shù))提供排序功能,閉包函數(shù)類型需為(String, String) -> Bool橄务。
func backwards( s1:String, s2:String)>Bool{
    returns1>s2
}
var reversed=names.sort(backwards)
print(reversed)

以上程序執(zhí)行輸出結(jié)果為:

["S", "D", "BE", "AT", "AE"]

如果第一個字符串 (s1) 大于第二個字符串 (s2)幔托,backwards函數(shù)返回true,表示在新的數(shù)組中s1應(yīng)該出現(xiàn)在s2前蜂挪。 對于字符串中的字符來說重挑,"大于" 表示 "按照字母順序較晚出現(xiàn)"。 這意味著字母"B"大于字母"A"棠涮,字符串"S"大于字符串"D"谬哀。 其將進行字母逆序排序,"AT"將會排在"AE"之前严肪。
參數(shù)名稱縮寫功能
您可以直接通過$0,$1,$2來順序調(diào)用閉包的參數(shù)史煎。
實例

let names = ["AT","AE","D","S","BE"]
var reversed = names.sort({$0>$1})
print(reversed)

$0和$1表示閉包中第一個和第二個String類型的參數(shù)。
以上程序執(zhí)行輸出結(jié)果為:

["S", "D", "BE", "AT", "AE"]

如果你在閉包表達(dá)式中使用參數(shù)名稱縮寫, 您可以在閉包參數(shù)列表中省略對其定義, 并且對應(yīng)參數(shù)名稱縮寫的類型會通過函數(shù)類型進行推斷驳糯。in 關(guān)鍵字同樣也可以被省略.
尾隨閉包
尾隨閉包是一個書寫在函數(shù)括號之后的閉包表達(dá)式篇梭,函數(shù)支持將其作為最后一個參數(shù)調(diào)用。

func someFunctionThatTakesAClosure(closure:()->Void){
    // 函數(shù)體部分
}
// 以下是不使用尾隨閉包進行函數(shù)調(diào)用
someFunctionThatTakesAClosure({
   // 閉包主體部分
})
// 以下是使用尾隨閉包進行函數(shù)調(diào)用
someFunctionThatTakesAClosure(){
    // 閉包主體部分
}

結(jié)構(gòu)體應(yīng)用

在你的代碼中酝枢,你可以使用結(jié)構(gòu)體來定義你的自定義數(shù)據(jù)類型恬偷。
結(jié)構(gòu)體實例總是通過值傳遞來定義你的自定義數(shù)據(jù)類型。
按照通用的準(zhǔn)則帘睦,當(dāng)符合一條或多條以下條件時袍患,請考慮構(gòu)建結(jié)構(gòu)體:
1 結(jié)構(gòu)體的主要目的是用來封裝少量相關(guān)簡單數(shù)據(jù)值。
2 有理由預(yù)計一個結(jié)構(gòu)體實例在賦值或傳遞時竣付,封裝的數(shù)據(jù)將會被拷貝而不是被引用诡延。
3 任何在結(jié)構(gòu)體中儲存的值類型屬性,也將會被拷貝古胆,而不是被引用孕暇。
結(jié)構(gòu)體不需要去繼承另一個已存在類型的屬性或者行為。
舉例來說赤兴,以下情境中適合使用結(jié)構(gòu)體:

  • 幾何形狀的大小妖滔,封裝一個width屬性和height屬性,兩者均為Double類型桶良。
  • 一定范圍內(nèi)的路徑座舍,封裝一個start屬性和length屬性,兩者均為Int類型陨帆。
  • 三維坐標(biāo)系內(nèi)一點曲秉,封裝x,y和z屬性疲牵,三者均為Double類型承二。

在實例方法中修改值類型

Swift 語言中結(jié)構(gòu)體和枚舉是值類型。一般情況下纲爸,值類型的屬性不能在它的實例方法中被修改亥鸠。
但是,如果你確實需要在某個具體的方法中修改結(jié)構(gòu)體或者枚舉的屬性识啦,你可以選擇變異(mutating)這個方法负蚊,然后方法就可以從方法內(nèi)部改變它的屬性;并且它做的任何改變在方法結(jié)束時還會保留在原始結(jié)構(gòu)中颓哮。
方法還可以給它隱含的self屬性賦值一個全新的實例家妆,這個新實例在方法結(jié)束后將替換原來的實例。

struct area{
    var length = 1
    var breadth = 1
    func area()->Int{
        return length*breadth
   }
    mutating func scaleBy(res:Int){
        length *= res
        breadth *= res
        print(length)
        print(breadth)
    }
}
var val=area(length:3,breadth:5)
val.scaleBy(3)
val.scaleBy(30)
val.scaleBy(300)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冕茅,一起剝皮案震驚了整個濱河市伤极,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姨伤,老刑警劉巖哨坪,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姜挺,居然都是意外死亡齿税,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門炊豪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凌箕,“玉大人,你說我怎么就攤上這事词渤∏2眨” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵缺虐,是天一觀的道長芜壁。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么慧妄? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任顷牌,我火速辦了婚禮,結(jié)果婚禮上塞淹,老公的妹妹穿的比我還像新娘窟蓝。我一直安慰自己,他們只是感情好饱普,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布运挫。 她就那樣靜靜地躺著,像睡著了一般套耕。 火紅的嫁衣襯著肌膚如雪谁帕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天冯袍,我揣著相機與錄音匈挖,去河邊找鬼。 笑死颠猴,一個胖子當(dāng)著我的面吹牛关划,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翘瓮,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贮折,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了资盅?” 一聲冷哼從身側(cè)響起调榄,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呵扛,沒想到半個月后每庆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡今穿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年缤灵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓝晒。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡腮出,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芝薇,到底是詐尸還是另有隱情胚嘲,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布洛二,位于F島的核電站馋劈,受9級特大地震影響攻锰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妓雾,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一娶吞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧君珠,春花似錦寝志、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毫缆。三九已至唯竹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苦丁,已是汗流浹背浸颓。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旺拉,地道東北人产上。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像蛾狗,于是被迫代替她去往敵國和親晋涣。 傳聞我的和親對象是個殘疾皇子苔咪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容