1.初始化数组、字典
//Array
var array = Array<T>()
//Dictionary
var name = Dictionary<String,value>()
更推荐的写法:
//Array
var array = [T]()
//Dictionary
var name = [String:Value]()
并且这个”() ” 表示调用Array和Dictionary的初始化方法
比如我创建一个class
class CalculatorBrain{ init() } //会调用init()方法 let instance = CalculatorBran()
2.如果不给方法显示的加private修饰符,那么这个方法就是public的
3.enum可以包含函数,也可以只包含属性,就像calss一样,enum中的case可以和数据类型管理起来
enum op{
case A(Double) //Operand和Double关联起来
case B(String,Double->Double) //UnaryOperation和一个元祖关联
case C(String,(Double,Double)->Double)//二元函数
}
4.函数的参数 默认是以let修饰的不可修改的变量
func evaluate(ops: [op]) -> String {
if !ops.isEmpty {
let op = ops.removeLast()
}
}
会报错 :ops是一个不可修改对象,不能被修改
这是因为function在参数前都会默认隐藏一个let,以上的这种写法其实和下面是一样的
func evaluate(let ops:[op]->String){
...
}
所以如果把let修改成var的话就不会报错了
如下:
func evaluate(var ops:[op]->String){
...
}
以上的这种写法和下面是一样的
func evaluate(ops:[op]->String){
var ops1 = ops
...
}
但是要知道的是,这样写并不会改变给函数外的数组。
因为:在Swift中 数组和Struct都做为参数传递的话 都是按值传递。
5.Struct和calss非常相似,Struct也可以有方法。
区别是:
①Struct不能有继承
②Struct是按值传递,class是按引用传递。
6.判断Enum中的值的好办法是使用switch
enum op{
case Operand(Double) //Operand和Double关联起来
case UnaryOperation(String,Double->Double) //UnaryOperation和一个元祖关联
case BinaryOperaion(String,Double)->Double)//二元函数 } func evaluate(ops: [op]) -> String {
if !ops.isEmpty {
var tmp = ops
let op = tmp.removeLast()
switch op {
case .Operand(let operand) //注意这边直接使用了一个"." 这是因为完整的写法是Op.Operand(Double),这里可以直接省略掉.号前面的Op
}
}
}
注意 不要对所有的switch 都加上default的处理。switch一个enum如果穷尽了enum里面的项,那么就不需要再加default处理
7.在项目中如果需要print出对象的具体信息,需要让对象可以转换成String
这个时候就需要如下2个步奏(对struct,enum也适用):
var description:String {
get{
return ....
}
}
②并且需要这个对象加上一个协议:Printable
完整例子:
enum op:Printable{
case Operand(Double)
case UnaryOperation(String,Double->Double)
case BinaryOperation(String,Double)->Double)
var description:String {
get{
switch self {
case .Operand(let operand):
return "\(operand )"
case .UnaryOperation(let symbol,_):
return symbol
case .BinaryOperation(let symbol,_):
return symbol
}
}
}
}
8.在swift中你可以在一个func中嵌套另外一个func
func test(){
func say(word:String){
print(word)
}
say("hello")
say("world")
}