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
}
}
}