swift第二课续

2016-10-18  本文已影响3人  倾心cyan

一. 函数的注意事项

1. 内部参数和外部参数

默认情况下, 函数中的所有参数都是内部参数, 从第二个参数开始既是内部参数也是外部参数,如果希望第一个参数也是外部参数, 可以在标识符前给该参数添加一个别名

2. swift中的默认参数

func makeCoffee(coffeeName : String = "雀巢") -> String{
    return "制作一杯\(coffeeName)咖啡"
}

3. 可变参数

参数个数可变时 加...

func sum(num : Int...) -> Int {
    var result = 0
    for n in sum {
        result += n
    }
    return result
}

4. 指针类型

可修改某些变量的数值

var m = 20
var n = 30

func swapNum (inout m : Int, inout n : Int) {
    let temp = m
    m = n
    n = temp
}

swapNum(&m, n:&n)  //m = 30 , n = 20

5. 函数的嵌套使用

func test() {
    func demo() {
        print ("demo")
    }
    print ("test")
    demo()
}

//打印内容 :
test
demo

二. 类

1. 类的基本使用

//1. 类的定义
class Person : NSObject {
    var age : Int = 0 //类的属性是可变的
}
//2. 创建类对应的对象
let p = Person()
//3. 给类的属性赋值
p.age = 20 //直接赋值
p.setValuesForKeysWithDictionary (["age" : 18]) //通过KVC赋值

4.可以重写setValue(value: AnyObject?, forUndefineKey key:, 那么字典中没有的字段可以在类中没有对应的属性)

5.override : 重写, 如果写的某一个方法是对父类的方法进行的重写, 那么必须在该方法前加上override

2. 属性

定义存储属性

class Student : NSObject {
    var age : Int  = 0
    var name : String? //可选类型初始化时默认为nil
}

定义计算属性

计算属性: 通过别的方式计算到结果的属性, 称为计算属性

class Student : NSObject {
    var age : Int  = 0
    var name : String? //可选类型初始化时默认为nil
    
    //定义计算属性
    var mathScore = 90
    var chineseScore = 80
    var averageScore : Double{
        return (mathScore + chineseScore) * 0.5
    }
}

定义类属性

类属性是和整个类相关的属性, 是通过类名进行访问的

用static 修饰

class Student : NSObject {
    var age : Int  = 0
    var name : String? //可选类型初始化时默认为nil
    
    //定义类属性
    static var courseCount : Int = 2 
}

属性监听器

class Student : NSObject {
    var age : Int  = 0
    var name : String? //可选类型初始化时默认为nil
    
    var height : Int {
        //即将改变时进行监听
        willSet {
            print(height)
            print(newValue)
        }
        //已经改变时进行监听
        didSet {
            print(height)
            print(oldValue)
        }
        
    }
        
}

构造函数

class Student : NSObject {
    var age : Int  = 0
    var name : String? //可选类型初始化时默认为nil
    
    //重写init 方法
    override init() {
        //构造函数中如果没有明确 super.init(), 那么系统会帮助调用super.init()
        //super.init()
        print("创建一个对象")
    }   
    
    //自定义构造函数
    init (name : String, age : Int) {
        self.age = age
        self.name = name
    }
    
    init(dict : [String : AnyObject]) {
        let tempName = dict["name"]
        name  = tempName as? String
        let tempAge = dict["age"]
        age = tempAge as! Int
        
        //tempName 是一个AnyObject?, 转成String?
        //as? 最终转成的类型是一个可选类型
        //as! 最终转成的类型是一个确定的类型
        
        //不过这样是不安全的 要这样写
        if let tempAge = dict["age"] as? Int {
            age = tempAge
        }
    }
    
}
上一篇 下一篇

猜你喜欢

热点阅读