Swift基本知識(shí)

一、數(shù)據(jù)類(lèi)型

1.基本數(shù)據(jù)類(lèi)型

let a:Int = 12 //聲明整形常量a  , let 代表常量,Int代表整形

var b:Float = 10.2 //聲明浮點(diǎn)型變量b,var代表變量,F(xiàn)loat代表浮點(diǎn)型,初值為10.2

let str = "helloWorld"

str.characters.count //計(jì)算字符串長(zhǎng)度

str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) //計(jì)算字符串長(zhǎng)度

注:字符串相等判斷: "==",字符串拼接判斷:“+”

str.uppercaseString  // 首字母大寫(xiě)

 str.lowercaseString // 首字母小寫(xiě)

// 格式化字符串(兩種方法)

let str2 = String(format: "%02d:%02d", 1,2);  //方法1

let str3 = String(format: "%02d-%02d", arguments: [1,2]) // 方法2

2.數(shù)組 Array (跟OC里面的數(shù)組一樣可以相互轉(zhuǎn)換)

a.不可變數(shù)組

let array1 = ["A", "2", "3", "4"] //定義不可變數(shù)組array1

// initWith/init在swift里面全部轉(zhuǎn)換為(),代表初始化

let array2 = [String]() //初始化定義不可變數(shù)組array2

// 訪問(wèn)數(shù)組元素個(gè)數(shù) .count

// 數(shù)組遍歷 for-in(明確指出數(shù)組的類(lèi)型)

for temp in array1 as [String]{

print(temp.characters.count)

}

// 元組遍歷

for(index, value) in array1.enumerate()

{

print("index = \(index), value = \(value)")   // \(參數(shù))為占位符

}

// b.可變數(shù)組

var mutableArray = [String]() // 定義可變數(shù)組(類(lèi)型為NSString)

mutableArray.append("hello")  // 添加元素

//mutableArray.append(23) //類(lèi)型不匹配

mutableArray.removeAll() //移除數(shù)組元素

// mutableArray.removeFirst(<#T##n: Int##Int#>) 從第一個(gè)元素開(kāi)始移除, 直到n結(jié)束

3. 字典 Dictionary

let dict = ["key1":"value1", "key2":"value2", "key3":"value3"] //定義不可變字典

// 通過(guò)key值訪問(wèn)value

print(dict["key1"])

// for-in遍歷

for (key,value) in dict  // 遍歷字典里面所有的key和value

{

print("key = \(key), value = \(value)")

}

var dict3 = ["key":"value"]

for (tempkey, tempValue) in dict{

// 如果key存在, 則是一個(gè)更新鍵值對(duì)操作, 否則是一個(gè)增加鍵值對(duì)操作

dict3[tempkey] = tempValue

}

4. ? 與 !的應(yīng)用

// 如果一個(gè)值可能為nil, 那么這個(gè)值就是可選類(lèi)型,用?標(biāo)識(shí)

// optional包圍的就是一個(gè)可選類(lèi)型

// 可選類(lèi)型不能直接使用, 必須進(jìn)行強(qiáng)制解包,!強(qiáng)制解包, 對(duì)nil強(qiáng)制解包會(huì)造成崩潰

var a1:String?

a1 = "12345"

// !!!!!unexpectedly found nil while unwrapping an Optional value 對(duì)一個(gè)空的可選類(lèi)型進(jìn)行強(qiáng)制解包

// (a1 ?? "234")  對(duì)一個(gè)空的可選類(lèi)型進(jìn)行強(qiáng)制解包, 如果可選類(lèi)型為nil, 則給他一個(gè)默認(rèn)值

print((a1 ?? "234").characters.count)

二. 分支語(yǔ)句

// if 條件語(yǔ)句()可以省略, {}不能省略

// if 沒(méi)有非0即真的概念, 只有true 和 false 的兩種情況

let tempValue  = 10
if tempValue > 5{
print("tempValue > 5")
}

1. 可選類(lèi)型的條件分支

let str:String? = "hello"

a.if-let

對(duì)可選類(lèi)型的判斷, 如果可選類(lèi)型為空, 則不執(zhí)行代碼塊, 如果不為空, 則用tempStr來(lái)接收此刻這個(gè)可選類(lèi)型解包后的值

// 只針對(duì)可選類(lèi)型 ?
if let  tempStr = str{
print(tempStr)
}
if str !=nil // 安全處理,防止str為空導(dǎo)致crash
{   str!  }

b.if-let-where

跟if-let 相似, where是對(duì)前面定義的這個(gè)局部變量在做一層判斷
if let tempStr = str where tempStr.characters.count > 2{
print("tempStr.length = \(tempStr.characters.count)")
}

c. guard-let-else

如果可選類(lèi)型str為nil,則執(zhí)行code代碼塊, 最后一定要return, 如果不為nil, 則強(qiáng)制解包后的值賦值給tempStr, 這樣在{}外面就可以使用tempStr
guard let tempStr = str else
{
//code
return
}
tempStr...

2. switch分支語(yǔ)句

switch 不局限判斷整形, 可以為浮點(diǎn)型, 也可以是字符串...
switch 判斷后面的小括號(hào)可以省略, 大括號(hào)不能省略
case 后面至少要有一條執(zhí)行語(yǔ)句?。。?!并且case后面的大括號(hào)可以省略, break可以不寫(xiě), 不會(huì)造成貫穿
default一定要寫(xiě), 并且只能寫(xiě)在最后
let f = 3.2
switch f
{
case 3.0:
print("===3.0")
case 3.1:
print("===3.1")
case 3.2:
print("3.2")
default:
print("know")
}

3. for...in 遍歷

for (var i = 0; i < 5; i++){  swift2.2的時(shí)候被廢棄
}

for var i = 0;i < 5; i += 1{
    print(i)
}
for i in 0..<5 { // 0..<5-----[0,5)  0...5-----[0,5]
print("i = \(i)")
}

三. 枚舉

a.枚舉值可以關(guān)聯(lián)浮點(diǎn), 字符串, 沒(méi)有默認(rèn)的關(guān)聯(lián)值,關(guān)聯(lián)如果是Int, 會(huì)默認(rèn)的遞增上去, 如果不是Int類(lèi)型, 必須每個(gè)枚舉值都關(guān)聯(lián)上

enum Month:CGFloat{ // 定義枚舉
case January = 10.1
case February = 10.2
case March = 10.3
case April = 10.4
}

b.如果明確指出一個(gè)變量/常量是屬于哪種枚舉類(lèi)型的話(huà), 可以直接.枚舉值, 否則就 枚舉類(lèi)型.枚舉值

/*
let month:Month = .February  // 定義month枚舉常量,值為February
var month1 = Month.January //定義month1枚舉變量
month1 = .February
*/
switch month{
case .January:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .February:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .March:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
case .April:
print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
print(month)
}
注:hashValue 的值為位置, rawValue為關(guān)聯(lián)的值
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容