Swift1.2とXcode 6.3 beta

3678 ワード

Xcode6.3とSwift 1.2はすでにリリースされています.今回のリリースでは、Swiftコンパイラが強化され、Swiftにも新しい機能が追加されました.詳細はここをご覧ください.ここでは主に重要な内容に注目します.
コンパイラの改良
Swift1.2のコンパイラはより安定しており、各方面の性能が向上しています.これらの改良により、Swiftを使用した開発体験が向上します.いくつかの表示される更新内容は次のとおりです.
  • インクリメンタルコンパイル-変更されていないファイルはデフォルトではコンパイルされません.これにより、コンパイル時間が大幅に向上します.広い範囲のコード調整は、マルチファイルの再コンパイルを引き起こします.
  • より高速な実行可能ファイル-debugモードで生成されたバイナリファイルは、実行速度を大幅に向上させます.新しい最適化はreleaseモードで生成されたバイナリファイルのパフォーマンスも向上します.
  • より良いコンパイル診断-より良いエラーと警告情報、より良い「fix-it」ヒント.これらはあなたがもっと良いSwift 1を書くのに役立ちます.2コードです.
  • より安定-一般的なコンパイラクラッシュが修正されました.SourceKitの警告もよく見られません.

  • 新しい言語プロパティ
    Swift1.2より良い安全と予見可能な行為がある.SwiftとObjective-Cのインタラクションも改善されました.主な改善点は以下の通りです.
  • as!タイプ変換子-タイプ変換は実行時に失敗する可能性があります.今asを使います!オペレータは、コードを読むか、コードのメンテナンス者に潜在的なランタイム変換に失敗したことをより明確に知らせる.

  • Objective-Cは空のタグを追加しました-新しいObjective-Cタグは、ヘッダファイルにポインタをタグしたり、blockが空になったりすることができます.OCとSwiftを混在させると、Swiftとより良いOCコードを書くことができます.次のようになります.
    -(void)registerNib:(nonnull UINib *)nib forCellReuseIdentifier:(nonnull NSString *)identifier;
    -(nullable UITableViewCell *)cellForRowAtIndexPath:(nonnull NSIndexPath)indexPath;
    @property (nonatomic, readwrite, retain, nullable) UIView *backgroundView;

    Swiftでは次のようになります.
    func registerNib(nib: UINib, forCellReuseIdentifier identifier: String)
    func cellForRowAtIndexPath(indexPath: NSIndexPath) -> UITableViewCell?
    var backgroundView: UIView?

    以前はimplicitly-unwrapped optionals暗黙解析オプションとして使用されていました(例えば、UInib!)方式はSwiftコードに導入される.空のタグがある場合、nonnullタグは感嘆符オペレータを使用しません.nullableタグはoptionalタイプとして使用され、上記のUItableViewCell戻り値がSwiftに導入されるとUItableViewCell?となる.
  • Swift列挙@objcプロパティを使用してObjective-Cに暴露できます.たとえば、次のコード:
  • @objc enum Bear: Int {
        case Black, Grizzly, Polar
    }

    OCのインポート後:
    typedef NS_ENUM(NSInteger, Bear) {
        BearBlack, BearGrizzly, BearPolar
    };
  • let定数はより強く、一貫しています.let定数はすぐに初期化する必要はありません.新しいルールはlet定数が使用前に初期化され、初期化のみ可能であることです.再コピーや変更はできません.だからlet式は
  • と書くことができます
    let x: SomeThing
               if condition {
                 x = foo()
               } else {
    x = bar() }
    use(x)
  • より強力なif letオプション解析-if letは一度に複数のoptionalを解析できます.bool条件も含めることができます.これにより、無効なネストを効果的に回避できます.例:
  • if let a = foo(), b = bar() where a < b,
                  let c = baz() {
    }
  • 新しいローカルデータ構造Set-OCのNSSetに対応する無秩序でユニークなデータセットタイプSet.

  • 結論
    Swift1.2言語的にも関連ツール的にも大きな一歩を踏み出した.もちろん、これらの変化には、コードが互換性のない内容も含まれています.だからXcode 6.3には、コード移行を自動的に完了するマイグレータが含まれています.Xcode->Edit->Converter->To Swift 1.2を開き、マイグレータを使用できます.
     
    参照先:https://developer.apple.com/swift/blog/?id=22