Swift语言
本文為熟悉使用Objective-C開發(fā)iOS快速轉(zhuǎn)入swift開發(fā)提供一些便利的途徑,沒有過多華麗的說明底層原理,也沒有過多的概念說明,只提供swift的基本使用以及一些使用示例。高手請讓路哈。
Swift中幾種數(shù)據(jù)類型的簡單使用,具體的可以看API文檔的相關(guān)介紹。
枚舉:
在其他的語言中枚舉的本質(zhì)是一組整形數(shù)字,通過枚舉將這些整形數(shù)字跟一些有意義的名稱聯(lián)系起來。但是在swift中枚舉并沒有要求一個枚舉值必須對應(yīng)一個數(shù)值,你可以只單純是一個名稱,當(dāng)然你也可以指定枚舉值跟一些數(shù)值聯(lián)系起來,同時數(shù)值不局限于整形數(shù)值,可以是浮點(diǎn)數(shù)值,字符或是字符串。
case用來定義一行新的成員,也可以將多個值定義到同一行使用逗號分隔
1 enum Month{ 2 case January 3 case February 4 case March 5 case April 6 case May 7 }
同時你也可以將枚舉值與數(shù)值對應(yīng)起來:
1 enum Month:Int{
2 case January = 10
3 case February
4 case March
5 case April
6 case May
7 }
8 并且使用rawValue來訪問原始值:
9 Month month = Month.Janusry
10 也可以通過rawValue來創(chuàng)建一個枚舉值:
11 let Jan = Month(rawValue:11)//注意此時是一個可選類型
數(shù)組:
swift中的數(shù)組跟OC的差別就是沒有了@符號
1,創(chuàng)建:
let array = ["happy","sad","down"] //OC的數(shù)組只能夠存儲同一種數(shù)據(jù)類型,在swift中可以存儲不同數(shù)據(jù)類型的值 let array = ["szt","szt1",1,"sff"]
2,取值
數(shù)組取值同樣是通過下標(biāo)取值的,跟OC一樣
3,遍歷
for item in array
{
print(item)
}
5,刪除:
swift中數(shù)組刪除一個元素會將被刪除的元素返回
array.removeAtIndex(1) array1.removeAll(keepCapacity: true)移除掉所有元素之后是否保存容量
6,數(shù)組合并:
數(shù)組里面元素同種類型才可以合并
1 var arr5 = ["123","456"] 2 var arr6 = [“567","789"] 3 arr5 += arr6 //數(shù)組合并的寫法
字典:
1,字典的創(chuàng)建跟數(shù)組一樣用[]
var dict = ["name":"szt","age":30]
2,遍歷數(shù)組有兩種方式
(1)遍歷key值
1 for q in dict.keys
2 {
3 print(dict[q])
4 }
(2)元組遍歷
1 for (key,value) in dict
2 {
3 print(key)
4 print(value)
5 }
3,新增/更新鍵值對
/*如果對應(yīng)的key在dict中沒有的話就新增,如果有的話就更新*/
var dict = ["name":"st","age":23]
更新:dict["name"] = "szt"
新增:dict["gender"] = "man"
4,刪除:
dict.removeValueForKey("name")
5,合并
var dict2 = ["socore":32]
for (key,value) in dict2
{
dict[key] = value
}
字符串:
OC中的字符串是NSString,swift中是String,而且是一個結(jié)構(gòu)體,性能比OC要高
1,創(chuàng)建
創(chuàng)建一個字符串:var str = "Hello, playground"
格式化創(chuàng)建一個字符串"name = szt,age = 30"
let num: Int = 23
let name: String = "szt"
var person = "name = (name),age = (num)"
2,截取:
截取字符串:在swift截取字符串建議使用OC中截取字符串的方法,所以在創(chuàng)建字符串的時候指明類型為NSString類型的
1 var str5:NSString = "iOS_developer_SZT"或者 2 var str5 = ""iOS_developer_SZT"" as NSString 3 str5.substringFromIndex(2) 4 str5.substringToIndex(5) 5 str5.substringWithRange(NSMakeRange(1, 5))
3,遍歷
swift中的字符串支持遍歷的:
1 var str7 = "www.Baidu.com" 2 for c in str7.characters // 在swift2.0之前必須加上.characters
3 {
4 print(c)
5 }
閉包:
swift中的閉包相當(dāng)于OC的block,用于保存一段代碼段,使用閉包或是block的好處是可以將閉包或block中的代碼段放在后臺執(zhí)行不會卡住主線程,用于執(zhí)行一些耗時的操作。
swift中閉包的格式為:
1 {
2 ()->() /*前面一個為輸入?yún)?shù)類型,后面一個返回參數(shù)類型*/
3 in
4 /*閉包中的代碼段*/
5 }
1,閉包定義
定義一個輸入?yún)?shù)為String類型,返回值為[String]類型的閉包:
1 let demo = {
2 (str:String)->[String]
3 in
4 /*.......(代碼段)*/
5 return [str,str,str]
6 }
2,閉包作為函數(shù)參數(shù):
func loadData(num:Int, finished: ()->())
{
print("執(zhí)行耗時操作")
finished() //調(diào)用閉包
}
調(diào)用這個函數(shù):
loadData(12) { () -> () in
/*閉包中的代碼段*/
}
3,閉包中的循環(huán)引用:
閉包的循環(huán)引用類似于block中的循環(huán)引用,當(dāng)self對閉包進(jìn)行強(qiáng)引用,閉包中又對self進(jìn)行強(qiáng)引用的,這時候后就會引起閉包的循環(huán)引用問題。解決的方式時將self進(jìn)行weak修飾。
例子:
class ViewController: UIViewController {
var finished:(()->())?
override func viewDidLoad() {
super.viewDidLoad()
//閉包的循環(huán)引用分析
/*
viewController中定義了一個閉包finished,self擁有閉包finish,在self的finish中又強(qiáng)引用了self造成的循環(huán)引用,解決的問題就是在
外面weak 修飾self
*/
weak var weakSelf = self
doSomeThing { () -> () in
print("這是在閉包當(dāng)中")
//加!原因是self有可能釋放了沒值,加!表示肯定self在這里是有值的
weakSelf!.view.backgroundColor = UIColor.redColor()
}
}
func doSomeThing(finished:()->())
{
print("做一些耗時的操作")
self.finished = finished
finished()
}
deinit // 在swift中沒有dealloc方法,取而代之的是deinit方法,在頁面銷毀的時候調(diào)用
{
print("頁面銷毀")
}
}
函數(shù):
函數(shù)格式
func 函數(shù)名()->() 第一個括號表示輸入?yún)?shù)類型 第二個括號表示返回參數(shù)類型
例:
1,無輸入?yún)?shù)無返回值
func say() ->Void 或 func say() ->() 或 func say()
2,無輸入?yún)?shù)有返回值
func isOrNot()->Bool
{
print("OK")
return true
}
3,有輸入?yún)?shù)無返回值
func addNum(b:Int,a:Int)
{
print(a+b)
}
4,有參數(shù)有返回值
func maxNum(a:Int,b:Int) ->Int
{
return a > b ? a:b
}
總結(jié)
- 上一篇: IP首部中的服务类型(TOS)
- 下一篇: ISP-CMOS图像传感器内部结构及工作