本文为熟悉使用Objective-C开发iOS快速转入swift开发提供一些便利的途径,没有过多华丽的说明底层原理,也没有过多的概念说明,只提供swift的基本使用以及一些使用示例。高手请让路哈。
Swift中几种数据类型的简单使用,具体的可以看API文档的相关介绍。
枚举:
在其他的语言中枚举的本质是一组整形数字,通过枚举将这些整形数字跟一些有意义的名称联系起来。但是在swift中枚举并没有要求一个枚举值必须对应一个数值,你可以只单纯是一个名称,当然你也可以指定枚举值跟一些数值联系起来,同时数值不局限于整形数值,可以是浮点数值,字符或是字符串。
case用来定义一行新的成员,也可以将多个值定义到同一行使用逗号分隔
1 enum Month{ 2 case January 3 case February 4 case March 5 case April 6 case May 7 }
同时你也可以将枚举值与数值对应起来:
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来创建一个枚举值: 11 let Jan = Month(rawValue:11)//注意此时是一个可选类型
数组:
swift中的数组跟OC的差别就是没有了@符号
1,创建:
let array = ["happy","sad","down"] //OC的数组只能够存储同一种数据类型,在swift中可以存储不同数据类型的值 let array = ["szt","szt1",1,"sff"]
2,取值
数组取值同样是通过下标取值的,跟OC一样
3,遍历
for item in array { print(item) }
5,删除:
swift中数组删除一个元素会将被删除的元素返回
array.removeAtIndex(1) array1.removeAll(keepCapacity: true)移除掉所有元素之后是否保存容量
6,数组合并:
数组里面元素同种类型才可以合并
1 var arr5 = ["123","456"] 2 var arr6 = [“567","789"] 3 arr5 += arr6 //数组合并的写法
字典:
1,字典的创建跟数组一样用[]
var dict = ["name":"szt","age":30]
2,遍历数组有两种方式
(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,新增/更新键值对
/*如果对应的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,而且是一个结构体,性能比OC要高
1,创建
创建一个字符串:var str = "Hello, playground"
格式化创建一个字符串"name = szt,age = 30"
let num: Int = 23
let name: String = "szt"
var person = "name = (name),age = (num)"
2,截取:
截取字符串:在swift截取字符串建议使用OC中截取字符串的方法,所以在创建字符串的时候指明类型为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中的闭包相当于OC的block,用于保存一段代码段,使用闭包或是block的好处是可以将闭包或block中的代码段放在后台执行不会卡住主线程,用于执行一些耗时的操作。
swift中闭包的格式为:
1 { 2 ()->() /*前面一个为输入参数类型,后面一个返回参数类型*/ 3 in 4 /*闭包中的代码段*/ 5 }
1,闭包定义
定义一个输入参数为String类型,返回值为[String]类型的闭包:
1 let demo = { 2 (str:String)->[String] 3 in 4 /*.......(代码段)*/ 5 return [str,str,str] 6 }
2,闭包作为函数参数:
func loadData(num:Int, finished: ()->()) { print("执行耗时操作") finished() //调用闭包 }
调用这个函数:
loadData(12) { () -> () in
/*闭包中的代码段*/
}
3,闭包中的循环引用:
闭包的循环引用类似于block中的循环引用,当self对闭包进行强引用,闭包中又对self进行强引用的,这时候后就会引起闭包的循环引用问题。解决的方式时将self进行weak修饰。
例子:
class ViewController: UIViewController { var finished:(()->())? override func viewDidLoad() { super.viewDidLoad() //闭包的循环引用分析 /* viewController中定义了一个闭包finished,self拥有闭包finish,在self的finish中又强引用了self造成的循环引用,解决的问题就是在 外面weak 修饰self */ weak var weakSelf = self doSomeThing { () -> () in print("这是在闭包当中") //加!原因是self有可能释放了没值,加!表示肯定self在这里是有值的 weakSelf!.view.backgroundColor = UIColor.redColor() } } func doSomeThing(finished:()->()) { print("做一些耗时的操作") self.finished = finished finished() } deinit // 在swift中没有dealloc方法,取而代之的是deinit方法,在页面销毁的时候调用 { print("页面销毁") } }
函数:
函数格式
func 函数名()->()
第一个括号表示输入参数类型
第二个括号表示返回参数类型
例:
1,无输入参数无返回值 func say() ->Void 或 func say() ->() 或 func say() 2,无输入参数有返回值 func isOrNot()->Bool { print("OK") return true } 3,有输入参数无返回值 func addNum(b:Int,a:Int) { print(a+b) } 4,有参数有返回值 func maxNum(a:Int,b:Int) ->Int { return a > b ? a:b }