Swift基础知识

前端之家收集整理的这篇文章主要介绍了Swift基础知识前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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也适用):

添加一个属性“description”

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

猜你在找的Swift相关文章