Swift入門(一)

相信很多新手開始學習Swift的時候都會有點無所適從,下面總結了一些初學者需要了解和注意的地方供大家參考和學習.

一.與OC的差別

1.程序入口:AppDelegate里面的UIApplicationMain

2.創建一個類只創建一個文件以.swift結尾

3.OC以@interface開始@end結束Swift以大括號{}開始和結束

4.OC一行代碼以;結束swift以換行結尾沒有分號(但加分號之后也不報錯)

二.創建對象

1..OC創建視圖(對象)用alloc init ? swift采用()來創建對象

2.OC采用initWithxxx ? swift采用(xxx:)

3.修改背景顏色[UIcolor redColor]? swift里面UIcolor.redColor

4.=左右兩邊都要有空格

5.Oc添加視圖self.view addsubview? swift里可以不寫self但寫了也不報錯(有一個地方進行比較----閉包)

6.Oc里枚舉是全的swift中采用類型.樣式的形式

7.Oc打印NSlog? swift中得枚舉可以直接省略前面的類型(注意:省略類型后,后面的提示有時候不好)? print執行效率比Nslog高

8.打印print(已經可以直接換行,從網上搜得好多資料說println才能換行,print不能,應該是之前的版本,swift2.0已經修改了)

同時注意print的使用:print("\(變量)")

三.swift語法

1.let定義常量賦值之后不能改變

2.var定義變量

注意:

1>swift里的自動推導:變量/常量依據等號右邊的值自動推導出變量/常量的類型

2>查看類型optional + click

3>不同類型之間不能直接運算(ocint+ folat有隱式轉換,會將低精度的int自動轉為float ?但是,swift只有強制轉換)

強制轉換兩種方式:1.不采用自動推導--->在變量名后面指定類型let a:Double =10

2.采用 類型(變量名)實現強制轉換

letnumber =10

letnum =Double(number)

print(num)//10.0

建議優先定義let,如果有需要,再改成var

四.可選項

1.可選項有可能有值,也有可能沒有值

2.可選項不能直接運算若要直接運算的話,需要強制解包

3.可選項是swift特有的.

4.什么是可選項?在變量/常量后面加一個?就是一個可選項.

leta :Int? =10(常量的可選項必須賦值,否則后面打印也會報錯)

ler.swift:21:15: Constant 'a' used before being initialized--->初始化之前就使用了

5.可選項的默認值為nil

6.強制解包在可選項后面加!就是強制解包(注意!前面沒有空格)

7.強制解包存在一定的風險

8.報錯

unexpectedly found nil while unwrapping an Optional value

強行解包的變量沒有值,就會報此錯誤,因此一定要考慮清楚是否能夠直接進行強制解包

9.蘋果為我們提供了一種新的方式: ??

??會判斷你前面的可選項是否為nil若為nil則取??后面的值若不為nil則對??前面的可選項進行解包操作

示例:

//可選項變量值為nil,??取后面的值

varnumber :Int?

letresult = (number ??0) +5

print(result)//打印結果為5

//可選項變量的值不為nil,取??前可選項解包后的值

varnumber1 :Int? =10

letresult1 = (number1 ??0) +5

print(result1)//打印結果為15

五.if語句

command+波浪線切換工程

Oc里面有非零即真概念

1.swift沒有非零即真的概念

2.if后面的()可以省略

3.但是{}不可以省略

4.三目運算符a?(b):(c)三目運算符在oc和swift里面一樣

示例:

//1.if

leta =10

ifa >=10{

print("\(a)")

}elseifa <19{

print("111")

}

//2.三目運算

letb =10

letc =20

letd = b > c ? b : c

print("\(d)")

六.if let語法

1.用于判斷可選項

iflet新的變量名=可選項{

新變量名的作用域:新變量名不是可選項

}

若新變量名有值(對可選項進行的一個解包),則運行if后面{}的值;

若新變量名沒有值則不執行

多個變量判斷,用逗號隔開.

2.iflet后面可以加where條件判斷語句,用于判斷新變量名是否符合要求;注意where后面沒有智能提示

多個變量用,分開進行判斷

示例:

leturlStr ="www.baidu.com"

leturl =NSURL(string: urlStr)

//if let語句,若新變量不為nil,則執行{}

ifletoUrl = url{

letrequest =NSURLRequest(URL: oUrl)

print(request)

}

七.guard let

1.guard let與iflet相反

guard let新變量名=可選項else{

return

}

新變量名的作用域

若新變量有值則不運行else后面{}里的代碼

若新變量名沒有值,(可選項為nil)則運行else后面{}的代碼

多個變量可以用,隔開,只有兩個變量都有值才走后面的代碼

示例:

leturlStr ="www.baidu.com"

leturl =NSURL(string: urlStr)

//guard let語句,若新變量為nil,則執行{},不為nil則執行{}后面的語句

guardletoUrl = urlelse{

return

}

letrequest =NSURLRequest(URL: oUrl)

print(request)

八.switch

oc中只能為常量

1.swift不僅局限于整型,字符串等其他類型

2.case后面可以不加break但是必須要有一條可執行的語句

3.當switch把所有的情況到考慮到的時候(例如:枚舉的類型),可以省略default(沒考慮到必須加)

示例一:

//switch語句

letscore =89

switchscore/10{

case6:

break

case7:

print("及格")

case8:

print("良好")

case9:

break

default:

break

}

示例二:

//定義一個枚舉的類型

enumScoreType:String{

caseTypeGood ="優"

caseTypeMiddle ="良好"

}

//定義一個變量

lettype :ScoreType= .TypeGood

//用switch(里面的case為枚舉的兩種類型,因為考慮到了全部的兩種情況,所以可以不寫default)

switchtype{

case.TypeGood:

print("優")

case.TypeMiddle:

print("良好")

}

九.for循環

1.for iint0...10{

print(i)//打印0到10共11個

}

2.for iint0..<10{

print(i)//打印0到9共10個

}

系統檢測到let a沒有被使用建議改為_這個_可以理解為忽略

十.字符串string類型

1.NSSring繼承自NSObject的對象swift中String是結構體(運行效率高一點)

2.可以相互轉換

一個中文占3個字節

3.字符串拼接

1> +(加號)拼接

2>print("\(str)便是晴天")"\(變量名)拼接的內容"

4.格式化字符串string(format:...)

示例:

//格式化字符串

leth =05

letm =06

lets =07

letstr1 =String(format:"%02d:%02d:%02d", arguments: [h,m,s])

print(str1)//打印結果:05:06:07

5.截取字符串:swift的截取字符串使用起來并沒有OC的靈活和方便,所以可以將String轉化為NSString來進行字符串的截取

示例:

//截取字符串swift風格的

//str = "你若安好,便是晴天"

letstartIndex = str.startIndex

letendIndex ="123".endIndex//此處的123為占位符(即換為任意的字符都可以,只是用來計算長度的)

letsubStr = str.substringWithRange(startIndex..

print(subStr)//打印結果:你若安

//截取字符串OC風格的

letsubStr1 = (strasNSString).substringWithRange(NSMakeRange(0,5))

print(subStr1)//打印結果:你若安好,

十一.集合:數組字典

一)數組用[]存放

2.let定義數組不可變var定義的數組可變

3.只能添加相同數據類型

4.若要添加不同類型強制指定為NSObject(oc的)也可以AnyObject(協議)[swift的]

ps:NSObject的父類也是一個協議

5.數組初始化[類型]()

6.合并數組+

注意:只能對相同類型的數組才能合并.

7.刪除數據

1>removeAll ? ------>刪除后內存沒有了

2>removeAll(keepCapacity:true)-->刪除后內存還在

3>removeFirst/AtIndex刪除第一個/指定元素

4>let value result[3]獲取指定索引的數據

示例:

//數組

//新建一個數組并指定其元素的類型

vararray = [1,2,3,4,5]

//追加元素

array.append(6)

//打印結果

print(array)//打印結果[1, 2, 3, 4, 5, 6]

//新建一個數組并指定其元素的類型

vartemp: [AnyObject] = [AnyObject]()

//追加元素

temp.append("你若安好")

vartemp1:[AnyObject] = [AnyObject]()

temp1.append("便是晴天")

temp1.append(0)

//數組的合并相同類型的數組可以直接用+來實現

varresult = temp + temp1

print(result)//打印結果:[你若安好,便是晴天]

//不同類型的數組可以遍歷其中一個來實現

forvalueinarray {

result.append(value)

}

print(result)//打印結果:[你若安好,便是晴天, 1, 2, 3, 4, 5, 6]

//刪除數組的元素

result.removeFirst()

print(result)//打印結果:[便是晴天, 1, 2, 3, 4, 5, 6]

//刪除全部元素

//對于打印結果的說明:在64之前,打印的是8的指數,例如有3個元素,打印8;有10個元素,打印16,但超過之后就沒有規律了

print(result.capacity)//打印結果8

//數組名.removeAll(keepCapacity: true),

//此處為true,則刪除所有的數據之后,內存還保留

//此處為false,則刪除所有的數據之后,內存不再進行保留

result.removeAll(keepCapacity:true)

print(result.capacity)//打印結果:8

result.removeAll()

print(result.capacity)//打印結果:0

二)字典

1.鍵值對["key": value](key一般是string value不一定)

2.可變字典var ;不可變字典let

3.添加數據字典名["name"] ="it"

4.若key值不存在直接添加數據;若key已經存在,則賦值會替換原來的值.

5.若想刪除字典的某一個key值,直接給key的值賦為nil就可以了.

6.若指定了字典的值的類型,必須是相同的類型才能賦值.想給字典添加其他的數據類型,需要在初始化的時候指定value的值的類型為AnyObject

7.對字典進行遍歷fordicinnewDict{

print(dic)

}

8.字典的合并

把dict合并到newDict-->遍歷dict,將其元素添加到newDict

示例:

//新建一個字典["key":value]

vardict = ["key":"value"]

//給字典賦值,若key不存在,則直接添加

dict["name"] ="果而"

print(dict)//打印結果:["key": "value", "name": "果而"]

//給字典賦值,若key存在,則會覆蓋原來的值

dict["name"] ="貝爾"

print(dict)//打印結果:["key": "value", "name": "貝爾"]

//若想要刪除字典的元素,則將key對應的value設置為nil即可

dict["name"] =nil

print(dict)//打印結果:["key": "value"]

//若要給字典添加不同類型的元素,需要將字典設置類型

varnewDict:[String:AnyObject] = [String:AnyObject]()

newDict["name"] ="史努比"

newDict["age"] =2

print(newDict)//打印結果:["age": 2, "name":史努比]

//字典的合并,遍歷一個字典,將其元素添加到另一個字典中

//字典的遍歷(注意key和value只是一個占位符)

for(key,value)indict{

print("字典的key為:\(key),value為:\(value)")

}

//字典的合并

for(key,value)indict{

newDict[key] = value

}

print(newDict)//打印結果為:["age": 2, "key": value, "name":史努比]

十二.函數

1.函數的格式: func函數名(參數名1:參數類型,...) ->返回值類型{函數的代碼}

2.函數的參數說明

3.函數的返回值

大部分函數返回值為空swift有3種返回值為空的形式

示例:

//函數

//第一個參數只是一個標記,在給函數參數的時候的提示

funcsum(第一個參數num1:Int, num2:Int) ->Int{

returnnum1 + num2

}

//函數返回值為空的三種寫法

funcdemo1(){

print("返回值為空")

}

funcdemo2() ->(){

print("返回值為空")

}

funcdemo3() ->Void{

print("返回值為空")

}

?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容