标签:
注意:
概念:
可选类型的取值:
定义一个可选类型有两种写法
// 错误写法 // let string : String = nil // 正确写法: // 写法一:定义可选类型 let string : Optional<String> = nil // 写法二:定义可选类型,语法糖(常用) let string : String? = nil
// 演练一: // 定义可选类型 var string : Optional<String> = nil // 给可选类型赋值 string = "Hello world" // 打印结果 print(string) // 结果:Optional("Hello world")n // 因为打印出来的是可选类型,所有会带Optional // 演练二: // 取出可选类型的真实值(解包) print(string!) // 结果:Hello worldn // 注意:如果可选类型为nil,强制取出其中的值(解包),会出错 string = nil print(string!) // 报错 // 正确写法: if string != nil print(string!) } // 简单写法:为了让在if语句中可以方便使用string if var str = string print(str) }
4.真实应用场景
// 通过该方法创建的URL,可能有值,也可能没有值 // 错误写法:如果返回值是nil时,就不能接收了 let url : NSURL = NSURL(string: "www.x.com") // 正确写法:使用可选类型来接收 let url : NSURL? = NSURL(string: "www.x.com") // 通过url来创建request对象 if let tempUrl = url let request = NSURLRequest(URL: tempUrl) }
func 函数名(参数列表) -> 返回值类型 代码块 return 返回值 }
// 1.没有参数,没用返回值 func about() -> Void print("iphone6s plus") } // 调用函数 about() // 简单写法 // 如果没用返回值,Void可以写成() func about1() -> () print("iphone6s plus") } // 如果没有返回值,后面的内容可以都不写 func about2() print("iphone6s plus") } about2() // 2.有参数,没用返回值 func callPhone(phoneNum : String) print("打电话给(phoneNum)") } callPhone("+86 11011") // 3.没用参数,有返回值 func readMessage() -> String return "吃饭了吗?" } var str = readMessage() print(str) // 4.有参数,有返回值 func sum(num1 : Int, num2 : Int) -> Int return num1 + num2 } var result = sum(20, num2: 30) print(result)
注意一: 外部参数和内部参数
// num1和a是外部参数的名称 func ride(num1 num1 : Int, a num2 : Int, b num3 : Int) -> Int return num1 num2 num3 } var result1 = ride(num1: 20, a: 4, b: 5) // 方法的重载:方法名称相同,但是参数不同,可以称之为方法的重载(了解) func ride(num1: Int, num2 :Int) -> Int return num1 num2 } var result2 = ride(20, 20)
注意二: 默认参数
func makecoffee(type :String = "卡布奇诺") -> String return "制作一杯(type)咖啡。" } let coffee1 = makecoffee("拿铁") let coffee2 = makecoffee()
注意三: 可变参数
func sum(numbers:Double...) -> Double var total: Double = 0 for number in numbers total += number } return total } sum(100.0, 20, 30) sum(30, 80)
注意四: 引用类型(指针的传递)
// 函数一:值传递 func swap(var a : Int, var b : Int) let temp = a; a = b; b = temp print("a:(a), b:(b)") } var a = 10 var b = 20 swap(a, b: b) print("a:(a), b:(b)") // 函数二:指针的传递 func swap1(inout a : Int, inout b : Int) let temp = a a = b b = temp print("a:(a), b:(b)") } swap1(&a, b: &b) print("a:(a), b:(b)")
函数的嵌套使用
// 函数的嵌套 let value = 55 func test() func demo() print("demo (value)") } print("test") demo() } demo() // 错误 test()
在Swift中如何定义类呢?
class 类名 : SuperClass // 定义属性和方法 }
注意:
Swift中类的属性有多种
存储属性
下面是存储属性的写法
class Student : NSObject // 定义属性 // 存储属性 var age : Int = 0 var name : String? var chineseScore : Double = 0.0 var mathScore : Double = 0.0 } // 创建学生对象 let stu = Student() // 给存储属性赋值 stu.age = 10 stu.name = "ryan" stu.chineseScore = 89.0 stu.mathScore = 98.0
计算属性
下面是计算属性的写法
class Student : NSObject // 定义属性 // 存储属性 var age : Int = 0 var name : String? var chineseScore : Double = 0.0 var mathScore : Double = 0.0 // 计算属性 var averageScore : Double get return (chineseScore + mathScore) / 2 } // 没有意义.newValue是系统分配的变量名,内部存储着新值 set self.averageScore = newValue } } } // 获取计算属性的值 print(stu.averageScore)
类属性
下面是类属性的写法
class Student : NSObject // 定义属性 // 存储属性 var age : Int = 0 var name : String? var chineseScore : Double = 0.0 var mathScore : Double = 0.0 // 计算属性 var averageScore : Double get return (chineseScore + mathScore) / 2 } // 没有意义.newValue是系统分配的变量名,内部存储着新值 set self.averageScore = newValue } } // 类属性 static var corseCount : Int = 0 } // 设置类属性的值 Student.corseCount = 3 // 取出类属性的值 print(Student.corseCount)
监听属性的改变
我们通过设置以下观察方法来定义观察者
监听的方式如下:
class Person : NSObject var name : String? // 可以给newValue自定义名称 willSet (new) // 属性即将改变,还未改变时会调用的方法 // 在该方法中有一个默认的系统属性newValue,用于存储新值 print(name) print(new) } // 可以给oldValue自定义名称 didSet (old) // 属性值已经改变了,会调用的方法 // 在该方法中有一个默认的系统属性oldValue,用于存储旧值 print(name) print(old) } } var age : Int = 0 var height : Double = 0.0 } let p : Person = Person() // 在赋值时,监听该属性的改变 // 在OC中是通过重写set方法 // 在swift中,可以给属性添加监听器 p.name = "ryan" //p.name = "szy"
标签:
原文地址:http://www.cnblogs.com/itsApe/p/5008757.html