【swift 关键词】让咱们牢记swift中的一些关键字用途

##好记性不如烂笔头html

学习swift 原英文版本ios

学习swift 翻译中文版git

swift数据类型与oc比较swift

###进入 退出swift网络

goswift > swift

//退出
goswift > ctr+z

###第一个关键字guard闭包

就是守护。guard语句判断其后的表达式布尔值为false时,才会执行以后代码块里的代码,若是为true,则跳过整个guard语句
guard后面必须跟else语句

###inoutapp

在参数前面用inout修饰,在函数内部实现改变外部参数
//调用的时候
swapTwoInts(&one, two: &two)
定义的时候
func swapTwoInts(inout one:Int , inout two:Int) {
     let temp = one
     one = two
     two = temp
}

###unowned函数

避免循环引用,使用unowned修饰( let unowned)
weak仅能修饰变量,不能修饰常量( var weak)

###lazy学习

懒加载,修饰闭包

OC的lazy加载是重写属性的get方法
swift的lazy是只执行一次

###willSet didSet get setui

willSet 添加观察属性变化 相似kvo里面的addObserver
didSet 检查属性已经变化

###mutating

用在struct和enum中的函数前面,做用是能够修改struct,enum和protocal中的属性值

struct SRectangle {
  var width = 200
}

extention SRectangle {
    
mutating func varifyWidth(num:Int) {}
}

###Subscripts Closures

下标的关键词 subscript
闭包的关键词 in
swift中全部闭包默认@noescape, 延迟操做,网络延迟须要@escape.
@autoclosure能够将一句话封装成闭包

###typealias

别名 typealias unitype = Int

常见应用 typealias bigProtocal = protocal<BigProtocal, CigProtocal>

###defer

1.延缓执行
2.多个defer的状况,像栈同样,后进先出,从下往上执行

###throws throw

throws 来声明异常,throw 来抛出异常

###do-catch

异常处理,注意不是try catch!

func functionWillThrowError() throws {
    //实现
}

do {
    throw functionWillThrowError()
}catch MyError.NotExist{

}catch MyError. OutOfRange{

}

###repeat

repeat是循环重复,是do-while的替身
repeat {

}while <#条件#>

###func 参数_

请注意定义方法有什么不一样
var a=3,b=6
func swapValue(inout a:Int, inout b:Int){}
方法调用 swapValue(&a,b:&b)
func swapValue(inout a:Int, inout _ b:Int){}
方法调用 swapValue(&a,&b)
注意参数添加_ 有必定的不一样

函数还能够做为一种类型
var mathFunc :(inout Int,inout Int)->() = swapValue

###extention

extension Int {
    subscript(digitIndex: Int) -> Int {
        var decimalBase = 1
        for _ in 0..<digitIndex {
            decimalBase *= 10
        }
        return (self / decimalBase) % 10
    }
}

746381295[0]//5

###value && reference type

值类型 和 引用类型
值类型(Value Types):每一个实例都保留了一分独有的数据拷贝。如结构体 (struct)、枚举(enum) 和元组(tuple)
引用类型(Reference Type):每一个实例共享同一份数据来源,如类(class)

// 下面是一个值类型的例子
struct MyStruct { var data = -1 }
var s1 = MyStruct()
var s2 = s1                           // s2是s1的拷贝
s1.data = 42                         // 值类型,改变s1的值,s2不受影响
println("\(s1.data), \(s2.data)")     // 输出结果 "42, -1"
//值类型: 复制的时候,至关于创造了一个彻底独立的实例,这个实例保有属于本身的独有数据,
数据不会受到其余实例的数据变化影响

// 下面是一个引用类型的例子
class MyClass { var data: Int = -1 }
var x = MyClass()
var y = x                           // y是x的拷贝
x.data = 42                         // 引用类型,更改x的值,等于同时修改了y
println("\(x.data), \(y.data)")     // 输出结果 "42, 42"
//引用类型: 复制的时候,其实是创造了一个共享的实例分身,二者是共用一套数据(数据存储的地址指向同一块内存)。
所以修改其中任何一个实例的数据,也会影响到另一个

###is as

is 是类型检查
var movieCount = 0
var songCount = 0
 
for item in library {
    if item is Movie {
        movieCount += 1
    } else if item is Song {
        songCount += 1
    }
}
as 是类型转化 as!,as?
for item in library {
    if let movie = item as? Movie {
        print("Movie: \(movie.name), dir. \(movie.director)")
    } else if let song = item as? Song {
        print("Song: \(song.name), by \(song.artist)")
    }
}

###map flatMap filter reduce

Swift提供了map、filter、reduce这三个高阶函数做为对容器的支持

###struct 和 class 区别

  • struct是value type, class 是reference type. struct 直接跟变量赋值,class不能
  • struct赋值给另一个struct,值不变,可是class要变
  • struct赋值给let,则里面不属性不能修改,class则能够修改属性值
  • extention struct 添加新funcs时须要添加mutating修饰,class不用添加修饰
  • struct 没有继承,class有继承

###IBDesignable 和 IBInspectable

在Swift里,@IBDesignable关键字写在class前便可。 
在OC里,是IB_DESIGNABLE这个关键字,写在@implementation前便可 
IBInspectable 

在swift里,@IBInspectable关键字写在须要显示的变量前便可 
在OC里,是IBInspectable这个关键字,写在须要显示的变量前便可

更多信息,点击> https://my.oschina.net/kshopping/blog/917185

相关文章
相关标签/搜索