隨著Swift逐漸趨于穩(wěn)定,越來越多的公司開始使用Swift寫程序,所以現(xiàn)在越來越多的公司需求這方面的人才.
下面我來跟大家分享一下我自己對Swift的基本理解
????????????????????????????????????? swift的基本認(rèn)識(shí)
// 跟iOS的OC比起來
// swift語句后面沒有分號(hào), 不小心加了也不會(huì)保存
// swift導(dǎo)入框架頭文件的時(shí)候沒有尖括號(hào), 直接寫
// swift中輸出不用加@
// 在swift中, 沒有.h 和.m文件, 只要一個(gè).swift文件
// 不需要引入頭文件, 除非是系統(tǒng)的頭文件
// print比NSLog強(qiáng)大很多
// let: 常量????? var: 變量
let a:Int = 12
let str = "hello"
// swift中不支持隱式轉(zhuǎn)換
// OC中強(qiáng)轉(zhuǎn):(float)a? swift中強(qiáng)轉(zhuǎn): Float(a)
print(Float(a))
// 在swift中, BOOL值不再是YES和NO,而是true和false
var isTrue:Bool = true
一. 字符串
// 判斷字符串是否為空
var testString = "呵呵噠"
isTrue = testString.isEmpty
// swift中字符串可以看做是字符的集合,求字符串的長度
testString.characters.count
// 轉(zhuǎn)碼
//str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
// 大小寫轉(zhuǎn)換
str.uppercaseString
str.lowercaseString
// 打印拼接字符串
//print("123 \(str)222")
let str2 = String(format: "%d:%d", 1,2)
let str3 = String(format: "%d-%d",? arguments: [6,8])
let str4 = "asdasdasd"
//print(str2)
//print(str3)
// 字符串剪切
//str4.substringFromIndex(<#T##index: Index##Index#>)
// 轉(zhuǎn)換
let str5: NSString = str2 as NSString
// 判斷兩個(gè)字符串是否相等
print(s1 == s2)
// 交換值
var str1 = "a"
var str2 = "b"
swap(&str1, &str2)
二. 數(shù)組
// 不可變數(shù)組
let array1 = ["1","2","C","D"]
let array2: [String] = ["1","2","C","D"]
let array3 = [String]()
print(array1)
print(array2)
print(array3)
// 元素個(gè)數(shù)
array1.count
// 數(shù)組遍歷 (for - in 遍歷要明確指出數(shù)組的類型)
for temp in array1 as [String]
{
print(temp)
}
// 元祖遍歷
for (index, value) in array1.enumerate()
{
print("index = \(index), value = \(value)")
}
// 可變數(shù)組
var mArray = [String]()
// 數(shù)組的拼接
mArray.append("krystal")
mArray.append("jessica")
//mArray.append(12)
//print(mArray)
// 數(shù)組的刪除
// 刪除個(gè)數(shù)
mArray.removeFirst(0)
//print(mArray)
三. 字典
let dic = ["key1":"value1", "key2":"value2", "key3":"value3"]
// 通過key值訪問value值
//print(dic["key1"])
// for - in 遍歷
for (tempKey, tempValue) in dic
{
print("key = \(tempKey), value = \(tempValue)")
}
// 可變字典
var dic1 = ["key":"value"]
// 字典的合并
for (tempKey, tempValue) in dic
{
// 如果key存在,更新鍵值對,如果不存在,則增加鍵值對
dic1[tempKey] = tempValue
}
//print(dic1)
var dic2= ["b":10]
// 刪除指定key對應(yīng)的value
dic2.removeValueForKey("b")
// 刪除所有
dic2.removeAll()
// 元祖, 類似C里的結(jié)構(gòu)體, 可以存放字符串,數(shù)組,字典,而且可以存放在一起
var aaa = ("b",["a","b","c"],["a","b"])
print(aaa.0)
print(aaa.1)
print(aaa.1[0])
print(aaa.2)
四. 可選類型:? ! 和 ?
// ? 可選性 (有值? 沒值)
// 其實(shí) ?本質(zhì)上是一個(gè)枚舉, 有兩種狀態(tài) optional(有值) optional(沒值)
// 如果一個(gè)值可能為空, 則是可選類型, 用?
// 可選類型不能直接使用, 必須強(qiáng)制解包, 用!
// 對一個(gè)空的可選類型進(jìn)行解包會(huì)引起crash
var a1: String?
a1 = "12345"
//print(a1!)
// (a2 ?? "123")對可選類型進(jìn)行判斷, 如果值為空,給它一個(gè)默認(rèn)值
var a2: String?
a2 = "45678"
//print((a2 ?? "123").characters.count)
五. 選擇結(jié)構(gòu)
// 1.if語句
// {}一定不能省略
// if 沒有非零即真的概念, 不可以不寫判斷語句
let b = 10
if b > 5
{
print("b > 5")
}
else
{
print("b < 5")
}
// 可選類型的條件分支
let str6 : String? = "vampire"
// 1. if - let
// if - let: 對可選類型的判斷, 如果可選類型為空,則不執(zhí)行代碼塊, 如果不為空則用tempStr接收這個(gè)可選類型解包后的值
if let tempStr = str6
{
print(tempStr)
}
// 2. if - let - where
// 跟 if - let相似, where是前面定義的tempStr再做一層判斷
if let tempStr = str6 where tempStr.characters.count > 2
{
print("tempStr.length = \(tempStr.characters.count)")
}
// 3. guard - let - else
// 如果str為空, 進(jìn)入代碼塊執(zhí)行,最后一定要return; 如果不為空, 強(qiáng)制解包賦值給tempStr, 以便使用
guard let tempStr = str else
{
// code
return
}
tempStr....
2. switch語句
// (1)switch在 OC中 和 在Swift中的區(qū)別: 不局限于判斷整形, 可以使浮點(diǎn)型, 也可以是字符串
// (2)switch后的()可以省略, {}不可以
// (3)case后至少有一條執(zhí)行語句
// (4)case后的{}可以省略, break可有可無, 不會(huì)造成貫穿
// (5)default一定要寫, 只能寫在最后
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("unknown")
}
3. 枚舉
// 可以關(guān)聯(lián)浮點(diǎn)型, 字符串, 沒有默認(rèn)的關(guān)聯(lián)值
// 關(guān)聯(lián)的如果是Int類型, 會(huì)默認(rèn)遞增, 如果不是, 必須每個(gè)枚舉都關(guān)聯(lián)上對應(yīng)的值
enum month:Float
{
case January = 11.0
case February = 11.1
case March = 11.2
case April = 11.3
}
// 如果明確指出一個(gè)變量/常量屬于哪種類型的話, 可以直接 .枚舉值
let months = month.January
//let months: month = month.January
//let months: month = .January
var month1 = month.January
month1 = .March
// hashValue: 第幾個(gè)
// rawValue: 對應(yīng)的值
switch month1
{
case .January:
print("hashValue = \(month1.hashValue), rawValue = \(month1.rawValue)")
print(month1)
case .February:
print("hashValue = \(month1.hashValue), rawValue = \(month1.rawValue)")
print(month1)
case .March:
print("hashValue = \(month1.hashValue), rawValue = \(month1.rawValue)")
print(month1)
case .April:
print("hashValue = \(month1.hashValue), rawValue = \(month1.rawValue)")
print(month1)
}
六.循環(huán)結(jié)構(gòu)
/*該寫法在Swift2.2版本后已被廢棄
for(var i = 0; i < 5; i++)
{
}
*/
for var i = 0; i < 5; i++
{
print(i)
}
// 0...5 -> [0,5]? ? 0..<5 -> [0,5)
for i in 0..<5
{
print("i = \(i)")
七. 閉包
/*
{
(參數(shù)名: 參數(shù)類型) -> 返回值類型
in
code
}
*/
// 無參無返
let block = {
() ->? Void in
print("無參無返")
}
block()
// 有參無返
// tempStr: 外部參數(shù)
// Swift3.0版本后不可用
let block1 = {
(tempStr1 str1: String, tempStr2 str2: String) -> Void in
print("有參無返: \(str1), \(str2)")
}
block1(tempStr1: "a", tempStr2: "b")
let block2 = {
(str1: String, str2: String) -> Void in
print("有參無返: \(str1), \(str2)")
}
block2("krystal", "jessica")
// 無參有返
let block3 = {
() -> String in
print("無參有返")
return "無參有返"
}
print(block3())
// 有參有返
let block4 = {
(a: Int, b: Int) -> Int in
print("有參有返: \(a), \(b)")
return a + b
}
print(block4(3, 2))
八. 函數(shù)
/*
func 方法名(參數(shù)名:參數(shù)類型)
{
code
}
*/
// 函數(shù)的四種類型
// 1. 無參無返
func test()
{
print("呵呵噠")
}
test()
// 2. 無參有返
func test1() -> Int
{
return 10
}
print(test1())
// 3. 有參無返
func test2(num1: Int, num2: Int)
{
print(num1 + num2)
}
test2(2, num2: 3)
// 4. 有參有返
func test3(num1: Int, num2: Int) -> Int
{
return num1 + num2
}
print(test3(10, num2: 10))
// 5. 元祖作為返回值
func yuanzu(num1: Int, num2: Int) -> (Int, Int)
{
return (num1 + num2, num1 * num2)
}
print(yuanzu(5, num2: 6))
// 輸入兩個(gè)字符串, 輸入一個(gè)閉包(將剛才輸入的兩個(gè)字符串當(dāng)做參數(shù), 并且返回一個(gè)拼接好的新的字符串)
func cString(str1: String, str2: String, block5:(tempStr1: String, tempStr2: String) -> String)
{
// 執(zhí)行閉包
let string3 = block5(tempStr1: str1, tempStr2: str2)
print(string3)
}
cString("你好", str2: "haha") { (tempStr1, tempStr2) -> String in
return "\(tempStr1)\(tempStr2)"
}
?
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 未完待續(xù).....
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 持續(xù)更新中.............