<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 類型(Types) 盡可能使用 Swift 原生類型。Swift 提供到 Objective-C 類型的橋接,所以你仍然可以使用許多需要的方法。 推薦做法: ~~~ let width = 120.0 // Double let widthString = (width as NSNumber).stringValue // String ~~~ 不推薦做法: ~~~ let width: NSNumber = 120.0 // NSNumber let widthString: NSString = width.stringValue // NSString ~~~ 在 Sprite Kit 代碼中,使用 CGFloat 可以使得代碼更加簡明,避免很多轉換。 ### 常量(Constants) 常量定義使用?`let`?關鍵字,變量定義使用?`var`?關鍵字,如果變量的值不需要改變,請盡量使用?`let`?關鍵字。 提示:一個好的技巧是,使用?`let`?定義任何東西,只有在編譯器告訴我們值需要改變的時候才改成?`var`?定義。 ### 可選類型(Optionals) 當nil值是可以接受的時候時,定義變量和函數返回值為可選類型(?)。 當你確認變量在使用前已經被初始化時,使用!來顯式的拆包類型,比如在`viewDidLoad`中會初始化`subviews`。 當你訪問一個可選值時,如果只需要訪問一次或者在可選值鏈中有多個可選值時,請使用可選值鏈: ~~~ self.textContainer?.textLabel?.setNeedsDisplay() ~~~ 當需要很方便的一次性拆包或者添加附加的操作時,請使用可選值綁定: ~~~ if let textContainer = self.textContainer { // do many things with textContainer } ~~~ 當我們命名一個可選變量和屬性時,避免使用諸如`optionalString`和`maybeView`這樣的命名,因為可選值的表達已經在類型定義中了。 在可選值綁定中,直接映射原始的命名比使用諸如`unwrappedView`和`actualLabel`要好。 推薦做法: ~~~ var subview: UIView? var volume: Double? // later on... if let subview = subview, volume = volume { // do something with unwrapped subview and volume } ~~~ 不推薦做法: ~~~ var optionalSubview: UIView? var volume: Double? if let unwrappedSubview = optionalSubview { if let realVolume = volume { // do something with unwrappedSubview and realVolume } } ~~~ ### 結構體構造器(Struct Initializers) 使用原生的 Swift 結構體構造器,比老式的幾何類(CGGeometry)的構造器要好。 推薦做法: ~~~ let bounds = CGRect(x: 40, y: 20, width: 120, height: 80) let centerPoint = CGPoint(x: 96, y: 42) ~~~ 不推薦做法: ~~~ let bounds = CGRectMake(40, 20, 120, 80) let centerPoint = CGPointMake(96, 42) ~~~ 推薦使用結構體限定的常量`CGRect.infiniteRect`,`CGRect.nullRect`等,來替代全局常量`CGRectInfinite`,`CGRectNull`等。對于已經存在的變量,可以直接簡寫成?`.zeroRect`。 ### 類型推斷(Type Inference) 推薦使用更加緊湊的代碼,讓編譯器能夠推斷出常量和變量的類型。除非你需要定義一個特定的類型(比如`CGFloat`和`Int16`),而不是默認的類型。 推薦做法: ~~~ let message = "Click the button" let currentBounds = computeViewBounds() var names = [String]() let maximumWidth: CGFloat = 106.5 ~~~ 不推薦做法: ~~~ let message: String = "Click the button" let currentBounds: CGRect = computeViewBounds() var names: [String] = [] ~~~ 注意:遵守這條規則意味選擇描述性命名比之前變得更加重要。 ### 語法糖(Syntactic Sugar) 推薦使用類型定義簡潔的版本,而不是全稱通用語法。 推薦做法: ~~~ var deviceModels: [String] var employees: [Int: String] var faxNumber: Int? ~~~ 不推薦做法: ~~~ var deviceModels: Array<String> var employees: Dictionary<Int, String> var faxNumber: Optional<Int> ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看