Swift——(五)Swift中的那些默认值
2014-06-23 22:59
197 查看
在Swift语言中,有很多默认值,这里将常用的总结,欢迎补充。
@Author: twlkyao转载或者引用请保留此行。
在如上代码中,形参a和形参b默认都是常量,如果需要a和b的值在函数内部可变,需要使用var关键字进行标识,函数实现两个整数交换,可是在函数外部,两个整数还是原值,如果想要修改之后的值可以在函数外部访问,需要添加inout关键字,并将var关键字删除。
在如上的代码中,willSet设置了新的参数名:newTotalSteps,didSet使用默认参数名:oldValue。
在如上代码中,变量a是有默认值nil的,如果想获得a的值,需要使用如下代码。
——————————Update 2014.06.30——————————
@Author: twlkyao转载或者引用请保留此行。
1.函数(方法)形参
在函数(方法)中,形参默认是常量,不可以在函数(方法)内部进行修改,这主要是为了防止误操作,防止在调用函数(方法)时改变了实参的值,所以使用常量,如果想在函数内部对实参进行修改,可以使用var关键字进行标识,但是这并没有结束,在函数(方法)外部,实参仍然未改变。如果想在函数(方法)调用结束之后仍然可以使用修改后的值,需要使用inout关键字进行标识,同时不要使用对形参进行标识,在调用函数(方法)的时候,传递的实参,需要使用"&"进行标识,类似于C、C++中的引用传递。func swap(a: Int, b: Int){ let c = a // a = b // can't assign to `let` value `a`. // b = c // can't assign to `let` value `a`. }如上代码,会出现编译错误,因为a和b默认是常量,不可以修改,如果想修改a和b,可以将代码更改如下:
func swap(var a: Int, var b: Int){ let c = a a = b b = c } var a = 3 var b = 2 swap(a, b) // a = 3, b = 2
在如上代码中,形参a和形参b默认都是常量,如果需要a和b的值在函数内部可变,需要使用var关键字进行标识,函数实现两个整数交换,可是在函数外部,两个整数还是原值,如果想要修改之后的值可以在函数外部访问,需要添加inout关键字,并将var关键字删除。
func swap(inout a: Int, inout b: Int){ let c = a a = b b = c } var a = 3 var b = 2 swap(&a, &b) // a = 2, b = 3
2.属性观察器
在Swift中可以为除了lazy的存储属性(stored property)和继承来的属性设置属性观察器,来观察属性值的变化,观察器有两种,willSet和didSet。willSet在属性值被改变之前调用,didSet在属性值被改变之后进行调用。 注:这里说的是改变,而不是设置,因为在初始化的时候,是不会调用这两个函数的。并且如果在didSet中,修改了属性值,也不会再次调用willSet和didSet。属性观察器,willSet中,即将设置的值默认为newValue(可以自己设置参数名),didSet中,设置之前的值默认为oldValue(可以自己设置参数名)。class StepCounter { var totalSteps: Int = 0 willSet(newTotalSteps){ println("About to set totalSteps to \(newTotalSteps)") // you can use newValue if you does not set a name with newTotalSteps } didSet{ if totalSteps > oldValue { println("Added \(totalSteps - oldValue) steps") } } } let stepCounter = StepCounter() // no output since it is the initialiser, not change the value. stepCounter.totalSteps = 200 // print both the willSet's and didSet's output.
在如上的代码中,willSet设置了新的参数名:newTotalSteps,didSet使用默认参数名:oldValue。
3.可选类型
这里先进行声明,在Swift中,可选类型是和其它类型不一样的(好像废话一样),例如:Int和Int?是完全不同的类型,如果想使用Int?类型的值,需要进行可选绑定或者强制解析(在进行强制解析的时候要确保该可选类型当前有值,否则会产生运行时错误),才能得到可选类型真正的值。class Optional{ var a: Int? var b: Int }
在如上代码中,变量a是有默认值nil的,如果想获得a的值,需要使用如下代码。
a = 10 // optional binding. if let c = a { println("\(c)") } else { println("a is nil") } // forced unwrapping, might cause an runtime error if a is nil. let d = a!
4.计算属性的setter
在计算属性中,属性的setter中,将要设置的新值默认为newValue。struct Circle { var radius: Float var diameter: Float { get{ return 2.0 * radius } set{ radius = newValue / 2.0 } } }如上代码中,没有设置参数名,使用默认的值:newValue。为了便于理解,可以设置新的参数名。
struct Circle { var radius: Float var diameter: Float { get{ return 2.0 * radius } set(newDiameter){ radius = newDiameter / 2.0 } } }
——————————Update 2014.06.30——————————
5.构造器
在Swift中,因为构造器在括号前没有函数名来标识构造器,所以构造器中的参数对构造器很重要,因此Swift默认为构造器提供了和内部参数名相同的外部参数名。从而在调用的使用也必须使用外部参数名。struct Color { let red = 0.0, green = 0.0, blue = 0.0 init(red: Double, green: Double, blue: Double) { self.red = red self.green = green self.blue = blue } } let magenta = Color(red: 1.0, green: 0.0, blue: 1.0) // let veryGreen = Color(0.0, 1.0, 0.0) // will result compile error.
相关文章推荐
- swift学习笔记(六)析关闭过程和使用分配给属性的默认值
- swift开发的那些应用
- Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数
- Swift中函数的默认值
- Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数
- [swift]iOS开发:使用rar解压库Unrar4iOS遇到的那些坑,另附上自己的一个简易版的本地沙盒文件浏览器
- ios TableView那些事2(Swift 二) 初见TableView Grouped
- ios TableView那些事2(Swift 一) 初见TableView
- 盘点本人在Swift开发中遇到的那些坑B问题!!!
- RxSwift 系列(九) -- 那些难以理解的概念
- Swift开发:iOS那些简单的动画
- Swift 3那些不同以往的特性
- Swift 那些二三事
- 还记得那些老国手吗? 07
- 那些你无意间踩过的坑-Java版
- Spring MVC 4那些事
- iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用
- 猫猫学Swift之Playground初次感受
- iOS中生成并导入基于Swift编程语言的Framework
- Swift版全排列-Heap's Algorithm