1.Tuple:元组
与数组类似,但是是圆括号()
元组里面类型可能不相同,如:
var t1:(Int,Int,Double) = (2,4,6.5)
print(t1)
2.元组通过点号加位置获取数据
通过元组可以返回多个值,如:(a,b,c)
元组个数不可更改
元组类型由元素类型决定
3.数组:dynamicType 显示类型
4.AnyObject 只能调用class类型
5.函数名去掉就是闭包
6.泛型:为了解决类型未定
push:放入
pop:取出
class Stack<T> {
var container = T
func push(a:T) {
container.append(a)
}
func pop() -> T {
return container.removeLast()
}
}
let m = Stack<Int>()
m.push(24)
m.push(36)
print(m.pop())
print(m.pop()) //36 24
7.泛型函数/模板函数
func printM<A> (a:A){
print(a)
}
printM(1.2)
printM("明天")
8.lazy:
懒加载,只有在使用的时候才加载或者初始化,即第一次使用才加载,接下来再去调用,不在执行初始化,只执行返回值,注意后面有个(),莫忘
class Animal {
lazy var name:String = {
print("正准备吃饭")
return "天真热"
}()
}
let ll = Animal()
print(ll.name)
print(ll.name)
//正准备吃饭
天真热
天真热
9.defer:
延时执行,跟栈类似,先进后出
func delayCall(){
var m1 = 10
defer{
print("AAA",m1)
// if m1 != 0 {
// fatalError()
// }
}
m1 = 20
defer{
print("BBB",m1)
}
m1 = 30 //相当于最后给m1赋值为30,然后再执行两个defer函数
print("A",m1)
print("B",m1)
}
delayCall()
//A 30
B 30
BBB 30
AAA 30
10.Any,AnyObject:
Any:任意类型,包括struct,class
AnyObject:任意对象类型,只包括class
11.final:修饰方法,不能在子类中被重写
class A {
final func eat() {
}
}
class B:A {
override func eat() {
}
}
注意:会报错,去掉final即可
12.@autoclosure:自动将表达式封装成闭包
func guess(@autoclosure m:() -> Bool) {
if m() {
print("true")
}
else{
print("false")
}
}
guess(10 > 9)
//true
13.inout:通过参数返回函数中的值
func swapAB(inout w:Int,inout r:Int) {
(w,r) = (r,w)
}
swapAB(&w, r: &r)
print(w,r)
14.泛型(Genercis):
用类型占位符来增加代码的重用性。
分为泛型函数与泛型类。
func printM<A> (a:A){
print(a)
}
printM(1.2)
printM("明天")
网友评论