swift的一些知识点演练

下面这些代码可以在playground中展现出来




import UIKit


/* 实例化一个 UIView 的对象,保存在堆中

[[UIView alloc] initWithXXX:xxx] 所有 OC中以这种格式的实例化方法,在 swift 中都可以使用 (XXX:)*/

let view = UIView(frame: CGRectMake(0,0,100, 100))


view.backgroundColor = UIColor.orangeColor()

// 在这里修改的是 view 属性,并没有修改 view 本身的地址


let btn = UIButton(frame: CGRectMake(20,20,60, 60))

btn.setTitle("hello",forState: UIControlState.normal)

view.addSubview(btn)



/*

实际的应用技巧

*/


// ? 表示 可以有值(Nsstring),也可以没有值(nil)

// ? 如果对象为空,就不会调用后面的方法,感觉上和 oc 中给 nil 发送消息类似

var str: Nsstring?

str = "hello"


// 打印可选项的时候,同时会输出一个 Optional提示开发者,这是一个可选项

println(str?.length)

//println(str!.length)


let l = 10

// 目前的代码存在什么风险?如果 str 没有设置初始值,会直接崩溃

// 苹果把判断对象是否有内容的工作交给了程序员

//let len = l + str!.length


// 隆重推荐:?? 用来快速判断对象是否为 nil

let len2 = l + (str?.length ?? 0)


// 以下代码和上面的代码等效

if str != nil {

let len3 = l + str!.length

}

// ?? 的应用场景最多的就在tableView 的数据源方法



/*

for 循环

*/


// 传统的写法,几乎一样

// 注意:需要使用 var 而不是 let

for var i = 0; i < 10; i++ {

println(i)

}


// 更加方便的写法

// in 指定范围 0~9

// 早期的 swift 语法 .. 后来改成了 ..<

for i in 0..<10 {

println(i)

}


// 0~10

for i in 0...10 {

println(i)

}


// 如果遍历的时候,对索引下标不关注

// 其实 `_` swift 中,使用的非常广泛,主要用于忽略

for _ in 0...5 {

println("hello")

}



字符串

/**

swift中,字符串认的类型是 String,而不是 Nsstring


* swift String 一个结构体,的效率更高

* 支持快速遍历

* Nsstring,继承自 NSObject,是一个 OC 对象

* 不支持快速遍历

*/

var str1 = "Hello,大家一起飞"

// 对字符串的快速遍历

for c in str1 {

println(c)

}


// 字符串的拼接

let str2 = str1 + " hello"

let i = 100

println(str1 + " \(i) abc \(view.backgroundColor)")


let frame = CGRectMake(100,200, 300)

println("区域 \(frame)")


// 但是:如果需要格式怎么办? Nsstring.stringWithFormat

let str3 = String(format: "%02d:%02d:%02d",arguments: [1,5,10])


swift 中,如果要结合 range 一起使用 字符串,建议先转成 Nsstring 再处理

*/

let myString: Nsstring = "hello"

myString.substringWithRange(NSMakeRange(1,4))

// 蛋疼的使用 String & Range -> 取子串

//let subStr = myString.substringWithRange(Range<String.Index>(start: advance(str.startIndex,1),end: advance(str.startIndex,3)))


数组

// 使用 []

// 定义的数组类型是 [String]

// 表示数组中,只能存放 字符串

// oc 中的数组,分可变和不可变

// swift let 是不可变的, var 是可变的

let array1 = ["zhangsan","lisi"]


// 遍历数组

for a in array1 {

let str = "hello " + a

println(str)

}


// 不能向不可变数组中追加元素

//array1.append("abc")


var array2 = ["aaa","bbb"]

// 添加元素

array2.append("ccc")


// 如果定义数组时,指定的对象类型不一致

// 定义的数组类型是 [NSObject]

// 细节:11一个整数,在 OC 中,如果要向数组中添加数字,需要转换成 NSNumber

// swift 中,可以直接添加 - 万物皆对象!

// 细节:通常在开始时,不建议在数组中使用不同类型的数据

var array3 = ["zzz",11,"123"]

for a in array3 {

let str = "hi \(a)"

println(str)

}


字典

// 定义一个字典,仍然使用 []

// 以下代码定义的字典类型是:[String : NSObject]

// 在目前的 swift 版本中,定义字典通常使用 [String : NSObject]

// 大多数情况下,key的类型是固定的

let dict = ["name": "zhangsan","title": "boss","age": 18]


// 遍历字典(注意:k,v 可以随便写,但是,前面是 key, 后面是 value)

// 这里使用了swift中的元祖技巧

for (kk,vv) in dict {

println("\(kk) -- \(vv)")

}


// 定义并且实例化字典

var dict1 = [String: NSObject]()


// 设置内容

dict1["name"] = "laowang"

dict1["age"] = 80


dict1


// 注意:如果 key 已经存在,设置数值时,会覆盖之前的值

dict1["name"] = "abc"

// 删除内容

dict1.removeValueForKey("age")

// 合并字典

var dict2 = ["title": "boss"]

dict2["name"] = "wangxiaoer"


// 字典的特性:key是不允许重复的

// 利用循环来进行合并

// 1> 遍历 dict2

for (k,v) in dict2 {

// updateValue 更新指定 key value

// 如果不存在 key,会新建,并且设置数值

// 如果存在 key,会直接覆盖

dict1.updateValue(v,forKey: k)

}


dict1

dict2




`函数`

// OC 风格 - (void)函数(参数) {}

/**

函数定义格式

func 函数(参数列表) -> 返回值 {// 代码实现}


* -> swift 特有的,表示 前面的执行结果,输出给后面的

*/

func sum(a: Int,b: Int) -> Int {

return a + b

}


sum(10,20)


// 强制填写参数,使用 #,可以在调用的时候,增加参数

// 会让代码提示更直观,符合 OC 程序员的习惯

func sum1(#a: Int,#b: Int) -> Int {

return a + b

}


sum1(a: 20,b: 80)



// 如果没有返回值 `-> 返回值` 可以省略

-> Void

-> ()

完全省略

以上三个是等价的

*/

func demo(a: Int) -> () {

println(a)

}


demo(10)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...