美文网首页iOS学习
Swift 2.0-Study(三)

Swift 2.0-Study(三)

作者: Restar | 来源:发表于2016-06-01 19:16 被阅读17次
    1. 结构体和类之间最重要的区别之一是,当它们在代码中被传递时,结构体总是被 copy 的, 属于值传递,而类是通过引用传递的。结构体用于定义轻量级数据类型,不需要有像继承和类构造那样的能力,结构体可以处理不同类型的数据;
      枚举类型使用位运算符赋初始值时,表示用于可复选的枚举属性,调用时使用 | 运算符

    2. protocol ExampleProtocol {
      var simpleDescription: String { get }
      func adjust()
      }
      { get }作为协议的属性表明它是只读的,意味着该属性的值可以查看,但不能修改

    3. Storyboard add constraints
      shift + All UI element —> click the Stack Button —> Attributes inspector set Spacing field —> Pin add constraint —> items of New Constraints
      Aspect Ratio 设置View元素比例,一旦设置,便保持不变

    4. AnyObject:一种被描述为可以属于任何类对象的类型

    5. as as! as?
      as使用场合
      (1)从派生类转换为基类,向上转型(upcasts)
      class Animal {}
      class Cat: Animal {}
      let cat = Cat()
      let animal = cat as Animal
      (2)消除二义性,数值类型转换

    let num1 = 42 as CGFloat
    let num2 = 42 as Int
    let num3 = 42.5 as Int
    let num4 = (42 / 2) as Double
    (3)switch 语句中进行模式匹配
    如果不知道一个对象是什么类型,你可以通过switch语法检测它的类型,并且尝试在不同的情况下使用对应的类型进行相应的处理。

    switch animal {
    case let cat as Cat:
    print("如果是Cat类型对象,则做相应处理")
    case let dog as Dog:
    print("如果是Dog类型对象,则做相应处理")
    default: break
    }
    as!使用场合
    向下转型(downcast)时使用。由于是强制类型转换,如果转换失败会报 runtime 运行错误。

    class Animal {}
    class Cat: Animal {}
    let animal :Animal = Cat()
    let cat = animal as! Cat
    as?使用场合
    as? 和 as! 操作符的转换规则完全一样。但 as? 如果转换不成功的时候便会返回一个 nil 对象。成功的话返回可选类型值(optional),需要我们拆包使用。
    由于 as? 在转换失败的时候也不会出现错误,所以对于如果能确保100%会成功的转换则可使用 as!,否则使用 as?

    let animal:Animal = Cat()

    if let cat = animal as? Cat{
    print("cat is not nil")
    } else {
    print("cat is nil")
    }

    1. failable Initializers (可失败构造器)
      初始化失败后可能返回 nil
      1)可以直接用条件判断语句使用可失败构造器来实例化对象
      2)init初始化方法可以通过在init关键字后面加上?或!将其变为可失败初始化方法,这样就表示某对象的初始化方法会产生两种结果
      3)可失败构造器/初始化方法解决了以前在Swift中只能通过工厂方法捕获构造或初始化失败情况的问题。比如,一个枚举,通过fromRaw工厂方法通过一 个原始值来寻找它所对应的枚举成员,返回类型为可选枚举类型。即如果该原始值对应的枚举成员存在,那么返回该枚举成员,如果不存在则返回nil。现 在,Swift编译器结合可失败构造器,通过可失败的初始化方法用switch语句判断原始值对应的枚举成员,如果没有对应的则返回nil:
      enum Color : Int {
      case Red = 0, Green = 1, Blue = 2

       // implicitly synthesized 
       var rawValue: Int { /* returns raw value for current case */ } 
      
       // implicitly synthesized 
       init?(rawValue: Int) { 
           switch rawValue {  
               case 0: self = .Red 
               case 1: self = .Green 
               case 2: self = .Blue 
               default: return nil 
           } 
       } 
      } 
      
    2. Storyboard 布局 (给 UItableViewCell 添加界面元素时做参考 )
      Editor —> Canvas —> Show Bounds Rectangles 使用蓝色矩形显示 UI 界面元素的 bounds,使得界面元素的局部排列更加容易
      如果向 Cell 中添加的是 UIView,当添加的 UIView 不需要交互时,需要将 Attribute inspector 中的 interaction 项取消交互

    3. 导航栏的背景会延伸到状态栏的顶部

    4. 判断数组:if array.isEmpty { return nil }

    相关文章

      网友评论

        本文标题:Swift 2.0-Study(三)

        本文链接:https://www.haomeiwen.com/subject/ecihdttx.html