//: Playground - noun: a place where people can play
import UIKit
// # 常量和變量
// 在一行中聲明多個變量或常量廓俭,用逗號分隔
var x = 0, y = 0.0, z = "dfd"
// 類型標(biāo)注
var welcomeMessage: String
welcomeMessage = "Hello"
// trick: 多個同類型變量
var red, green, blue: Double
// 輸出全局函數(shù): print(<#T##items: Any...##Any#>, separator: <#T##String#>(默認(rèn)值是空格), terminator: <#T##String#>(默認(rèn)值是換行))
// # 注釋
// # 分號
// # 整數(shù)
// 用.min, .max訪問類型的最小最大值邪驮,這是一個static的只讀變量
print(UInt8.min)
// # 浮點(diǎn)數(shù)
// # 類型安全和類型推斷
// 字面量3和7都被推斷為Double舌狗,如果不是字面量會報錯柳畔。換言之,字面量 3 可以直接和字面量 0.14159 相加,因?yàn)閿?shù)字字面量本身沒有明確的類型救欧。它們的類型只有在編譯器需要計算的時候才會被推測出來定庵。
var result = (3 + 2.1) / 7
// # 數(shù)值型字面量
// 1.25e2意味著125.0吏饿,1.25e-2意味著0.0125
// trick: 整數(shù)和浮點(diǎn)數(shù)都可以添加額外的零或者添加下劃線來增加代碼的可讀性。下面的這些格式都不會影響字面量的值蔬浙。
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
// # 數(shù)值類型轉(zhuǎn)換
// 拓展Int使其支持類型轉(zhuǎn)換猪落。要注意Int中self的用法。
class Binary {
var first = 0
var secend = 0
}
extension Int {
init(_ binary: Binary) {
self = binary.first * 2 + binary.secend
}
}
var binary = Binary()
print(Int(binary))
// 在用浮點(diǎn)數(shù)初始化一個新的整數(shù)類型的時候敛滋,數(shù)值會被截斷许布。也就是說 4.75 會變成 4 , -3.9 會變?yōu)?-3 绎晃。
// # 類型別名
typealias Student = Int
let tom = Student(8)
let jerry = Int(3)
// # 布爾值
// # 元組
// 是值類型
// 元組可以合起來使用
let coupleOne = ("James", "Marry")
print(coupleOne)
print(coupleOne.0)
// 也可以分開使用蜜唾,又叫拆分,是單獨(dú)提取元組元素時用
let (husband, wife) = ("Bob", "Lily")
print("The husband is \(husband)")
// trick: 拆分過程中不需要的用_代替
let (anotherHusband, _) = ("Kevin", "Sophia")
print(anotherHusband)
// 調(diào)整內(nèi)部名庶艾,也可以就用默認(rèn).0, .1等訪問袁余。注意這并非是拆分了元組,不能直接用新名字。另外可以看到咱揍,coupleFour的類型為(fourthHusband: String, fourthWife: String)而不是(String, String),有本質(zhì)區(qū)別
let coupleFour = (fourthHusband: "King", fourthWife: "Darling")
print(coupleFour.1)
print(coupleFour.fourthHusband)
// # 可選項(xiàng)
// trick: String轉(zhuǎn)換為Int的初始化器颖榜,返回一個Int?
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
var sir: String? // var類型可選被自動設(shè)值為nil
let shemale: String? // let類型可選不會被隱式初始化為nil
shemale = "Jack" // 此時被初始化,此后不能再改變其值
var lady: String? = "Sophia"
// 在類型中,也可以得到體現(xiàn)
class Dog {
var name: String? // 若為let掩完,會報錯并提示init未對其初始化
var color: String
init(ofColor color: String) {
self.color = color
}
}
// 用if判斷然后強(qiáng)制展開噪漾,好處是不用多令一個常量并且保證安全
if convertedNumber != nil {
print("convertedNumber contains some intrgar value and it's \(convertedNumber!)")
}
// 可選項(xiàng)綁定,可用于if和while語句且蓬,好處是可以多一個變量來使用可選包含的量并且安全欣硼。注意,控制流里定義的變量在之后消失 while let???
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
print("\'\(possibleNumber)\' could not be converted to an integer")
}
// trick: 在同一個if語句中包含多個可選項(xiàng)綁定和布爾運(yùn)算恶阴,用逗號隔開诈胜,相當(dāng)于“與”運(yùn)算。
if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber, secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
// 隱式展開可選項(xiàng):既不用寫所在類的初始化器冯事,又不用麻煩地每次強(qiáng)制展開焦匈。也可以用if判斷或者用可選項(xiàng)綁定
var assumedString: String!
assumedString = "OK"
assumedString = nil
// trick: 不要在一個變量將來會變?yōu)?nil 的情況下使用隱式展開可選項(xiàng)。這樣有些危險昵仅,不如用普通可選項(xiàng)了缓熟。
// ??:合并空值運(yùn)算符
var flag: Bool?
var shitIsGood = flag ?? false
print(shitIsGood)
// # 錯誤處理
// 函數(shù)聲明過程加上throws關(guān)鍵字
func makeASandwich() throws {
}
// 調(diào)用函數(shù)時,在表達(dá)式前置try關(guān)鍵字岩饼。do語句創(chuàng)建容器范圍荚虚,可讓錯誤傳遞到catch分句
/*
do {
try makeASandwich()
// 如果沒有錯誤,則調(diào)用
eatASandwich()
} catch Error.OutOfCleanDishes {
washDishes()
} catch Error.MissingIngredients(let ingredients) {
buyGroceries(ingredients)
}
*/
// # 斷言和先決條件
// 斷言:一個從宏觀角度檢查程序的全局函數(shù)籍茧,并且只在調(diào)試階段觸發(fā)
let age = 3
assert(age >= 0, "A person's age cannot be less than zero")
// 直接斷言
if age >= 0 {
print("You are human now")
} else {
assertionFailure("A person's age cannot be less than zero")
}
// 先決條件版述,差不多,具體差異???
precondition(age >= 0, "A person's age cannot be less than zero")
// fatalError(_:file:line:)也差不多寞冯,只是不用執(zhí)行檢查罷了
//: Playground - noun: a place where people can play
import UIKit
// # 常量和變量
// 在一行中聲明多個變量或常量渴析,用逗號分隔
var x = 0, y = 0.0, z = "dfd"
// 類型標(biāo)注
var welcomeMessage: String
welcomeMessage = "Hello"
// trick: 多個同類型變量
var red, green, blue: Double
// 輸出全局函數(shù): print(<#T##items: Any...##Any#>, separator: <#T##String#>(默認(rèn)值是空格), terminator: <#T##String#>(默認(rèn)值是換行))
// # 注釋
// # 分號
// # 整數(shù)
// 用.min, .max訪問類型的最小最大值,這是一個static的只讀變量
print(UInt8.min)
// # 浮點(diǎn)數(shù)
// # 類型安全和類型推斷
// 字面量3和7都被推斷為Double吮龄,如果不是字面量會報錯俭茧。換言之,字面量 3 可以直接和字面量 0.14159 相加漓帚,因?yàn)閿?shù)字字面量本身沒有明確的類型母债。它們的類型只有在編譯器需要計算的時候才會被推測出來。
var result = (3 + 2.1) / 7
// # 數(shù)值型字面量
// 1.25e2意味著125.0尝抖,1.25e-2意味著0.0125
// trick: 整數(shù)和浮點(diǎn)數(shù)都可以添加額外的零或者添加下劃線來增加代碼的可讀性毡们。下面的這些格式都不會影響字面量的值。
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
// # 數(shù)值類型轉(zhuǎn)換
// 拓展Int使其支持類型轉(zhuǎn)換昧辽。要注意Int中self的用法衙熔。
class Binary {
var first = 0
var secend = 0
}
extension Int {
init(_ binary: Binary) {
self = binary.first * 2 + binary.secend
}
}
var binary = Binary()
print(Int(binary))
// 在用浮點(diǎn)數(shù)初始化一個新的整數(shù)類型的時候,數(shù)值會被截斷搅荞。也就是說 4.75 會變成 4 红氯, -3.9 會變?yōu)?-3 框咙。
// # 類型別名
typealias Student = Int
let tom = Student(8)
let jerry = Int(3)
// # 布爾值
// # 元組
// 是值類型
// 元組可以合起來使用
let coupleOne = ("James", "Marry")
print(coupleOne)
print(coupleOne.0)
// 也可以分開使用,又叫拆分痢甘,是單獨(dú)提取元組元素時用
let (husband, wife) = ("Bob", "Lily")
print("The husband is \(husband)")
// trick: 拆分過程中不需要的用_代替
let (anotherHusband, _) = ("Kevin", "Sophia")
print(anotherHusband)
// 調(diào)整內(nèi)部名喇嘱,也可以就用默認(rèn).0, .1等訪問。注意這并非是拆分了元組,不能直接用新名字塞栅。另外可以看到婉称,coupleFour的類型為(fourthHusband: String, fourthWife: String)而不是(String, String),有本質(zhì)區(qū)別
let coupleFour = (fourthHusband: "King", fourthWife: "Darling")
print(coupleFour.1)
print(coupleFour.fourthHusband)
// # 可選項(xiàng)
// trick: String轉(zhuǎn)換為Int的初始化器,返回一個Int?
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
var sir: String? // var類型可選被自動設(shè)值為nil
let shemale: String? // let類型可選不會被隱式初始化為nil
shemale = "Jack" // 此時被初始化构蹬,此后不能再改變其值
var lady: String? = "Sophia"
// 在類型中,也可以得到體現(xiàn)
class Dog {
var name: String? // 若為let悔据,會報錯并提示init未對其初始化
var color: String
init(ofColor color: String) {
self.color = color
}
}
// 用if判斷然后強(qiáng)制展開庄敛,好處是不用多令一個常量并且保證安全
if convertedNumber != nil {
print("convertedNumber contains some intrgar value and it's \(convertedNumber!)")
}
// 可選項(xiàng)綁定,可用于if和while語句科汗,好處是可以多一個變量來使用可選包含的量并且安全藻烤。注意,控制流里定義的變量在之后消失 while let???
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
print("\'\(possibleNumber)\' could not be converted to an integer")
}
// trick: 在同一個if語句中包含多個可選項(xiàng)綁定和布爾運(yùn)算头滔,用逗號隔開怖亭,相當(dāng)于“與”運(yùn)算。
if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber, secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
// 隱式展開可選項(xiàng):既不用寫所在類的初始化器坤检,又不用麻煩地每次強(qiáng)制展開兴猩。也可以用if判斷或者用可選項(xiàng)綁定
var assumedString: String!
assumedString = "OK"
assumedString = nil
// trick: 不要在一個變量將來會變?yōu)?nil 的情況下使用隱式展開可選項(xiàng)。這樣有些危險早歇,不如用普通可選項(xiàng)了倾芝。
// ??:合并空值運(yùn)算符
var flag: Bool?
var shitIsGood = flag ?? false
print(shitIsGood)
// # 錯誤處理
// 函數(shù)聲明過程加上throws關(guān)鍵字
func makeASandwich() throws {
}
// 調(diào)用函數(shù)時,在表達(dá)式前置try關(guān)鍵字箭跳。do語句創(chuàng)建容器范圍晨另,可讓錯誤傳遞到catch分句
/*
do {
try makeASandwich()
// 如果沒有錯誤,則調(diào)用
eatASandwich()
} catch Error.OutOfCleanDishes {
washDishes()
} catch Error.MissingIngredients(let ingredients) {
buyGroceries(ingredients)
}
*/
// # 斷言和先決條件
// 斷言:一個從宏觀角度檢查程序的全局函數(shù)谱姓,并且只在調(diào)試階段觸發(fā)
let age = 3
assert(age >= 0, "A person's age cannot be less than zero")
// 直接斷言
if age >= 0 {
print("You are human now")
} else {
assertionFailure("A person's age cannot be less than zero")
}
// 先決條件借尿,差不多,具體差異???
precondition(age >= 0, "A person's age cannot be less than zero")
// fatalError(_:file:line:)也差不多屉来,只是不用執(zhí)行檢查罷了
1.基礎(chǔ)內(nèi)容 The Basics Swift官方文檔——版納的筆記
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門郭蕉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疼邀,“玉大人,你說我怎么就攤上這事召锈∨哉瘢” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵涨岁,是天一觀的道長拐袜。 經(jīng)常有香客問我,道長梢薪,這世上最難降的妖魔是什么蹬铺? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮秉撇,結(jié)果婚禮上甜攀,老公的妹妹穿的比我還像新娘。我一直安慰自己琐馆,他們只是感情好规阀,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘦麸,像睡著了一般谁撼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞎暑,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逢并!你這毒婦竟也來了之剧?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對情侶失蹤砍聊,失蹤者是張志新(化名)和其女友劉穎背稼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玻蝌,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡蟹肘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年词疼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帘腹。...
- 正文 年R本政府宣布球化,位于F島的核電站秽晚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏筒愚。R本人自食惡果不足惜爆惧,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锨能。 院中可真熱鬧,春花似錦芍耘、人聲如沸址遇。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽倔约。三九已至,卻和暖如春坝初,著一層夾襖步出監(jiān)牢的瞬間浸剩,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓拗小,卻偏偏與公主長得像重罪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哀九,可洞房花燭夜當(dāng)晚...