码迷,mamicode.com
首页 > 其他好文 > 详细

Swift——(五)Swift中的那些默认值

时间:2014-06-24 20:29:25      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:swift   默认值   

    在Swift语言中,有很多默认值,这里将常用的总结,欢迎补充。

    @Author: twlkyao


    1.函数(方法)形参

    在函数(方法)中,形参默认是常量,这主要是为了防止误操作,在调用函数(方法)时改变了实参的值,所以使用常量,如果想在函数内部对实参进行修改,可以使用var关键字进行标识,但是这并没有结束,如果想在函数(方法)调用结束之后仍然可以使用修改后的值,需要使用inout关键字进行标识,同时不要使用var对形参进行标识,在调用函数(方法)的时候,传递的实参,需要使用"&"进行标识,类似于C、C++中的引用传递。
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
        }
    }
}

Swift——(五)Swift中的那些默认值,布布扣,bubuko.com

Swift——(五)Swift中的那些默认值

标签:swift   默认值   

原文地址:http://blog.csdn.net/twlkyao/article/details/33799353

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!