開発メモ

開発関係のメモをいろいろと。たぶん。

Using Swift with Cocoa and Objective-Cのメモ(その2)

はじめに

これは、『Using Swift with Cocoa and Objective-C』を読んだ時の個人的なメモです。なので、引用はすべて『Using Swift with Cocoa and Objective-C』から。

iTunes - ブック - Apple Inc.「Using Swift with Cocoa and Objective-C
https://itunes.apple.com/jp/book/using-swift-cocoa-objective/id888894773?mt=11

その1はこちら。

Using Swift with Cocoa and Objective-Cのメモ(その1) - 開発メモ
http://seeku.hateblo.jp/entry/2014/06/20/205708


Adopting Cocoa Design Patterns

  • よく設計された弾力性のあるアプリを作るには、Cocoaで確立されたデザインパターンを使用するのが良いよ
  • これらのパターンの多くはObjective-Cと関連づいてるけど、SwiftはObjective-Cと相互運用性があるから同じパターンが使えるよ

Delegation

  • Objective-Cでデリゲーションを使う時は、いろいろとチェックが大変だよ
  • Swiftだと簡単で安全だよ

Error Reporting

  • エラーの詳しい情報が必要な場合、NSErrorPointerが使えるよ
    これは、NSErrorを返す型だよ。
    大雑把に言うと、Objective-Cの『NSError**』を安全にしたものだよ。

メモ: NSErrorPointerの詳細を確認

  • こんな感じで使うことになるよ
var writeError : NSError?
let written = myString.writeToFile(path, atomically: false,
    encoding: NSUTF8StringEncoding,
    error: &writeError)
if !written {
    if let error = writeError {
        println("write failure: \(error.localizedDescription)")
    }
}

Target-Action

  • Target-ActionはSwiftでも同じように使えるよ

Interacting with C APIs

Primitive Types

  • SwiftはCの基本型と同等の型を用意してるよ
    boolに対するCBool、charに対するCCharなど。

  • けど、Swiftの基本型との暗黙の型変換は無いよ

  • どうしても必要なときだけCと同等の型を使って、そうでなければSwiftの基本型を使ったほうが良いよ

Enumerations

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
   UITableViewCellStyleDefault,
   UITableViewCellStyleValue1,
   UITableViewCellStyleValue2,
   UITableViewCellStyleSubtitle
};
  • Swiftだとこう
enum UITableViewCellStyle: Int {
    case Default
    case Value1
    case Value2
    case Subtitle
}
  • 『NS_OPTIONS』マクロで作った列挙型も同じように取り込まれるよ
  • この場合、Objective-Cでは身が無いパターンは0になってたけど、Swiftだとnilになるよ

メモ: 要確認

Pointers

  • Swiftは、可能な限りポインターを直接触ることを避けてるよ
  • けど、ポインターがどうしても必要な場合もあるよ
  • そんな時のために、いくつかの型を用意してあるよ
    『const void *』に対する『CConstVoidPointer』など。

メモ: いろいろまとめて要確認

Preprocessor Directives

Simple Macros

  • CやObjective-Cで『#define』を使って定義してた定数は、Swiftだとグローバル定数を使うよ

Complex Macros

  • CやObjective-Cの関数みたいなマクロに相当するものは、Swiftには無いよ
  • あれは、型チェックの制約を避けたり、タイピングの繰り返しを省くためのものだよ
  • デバッグリファクタリングを難しくするよ

  • Swiftだと関数やジェネリックを使って、もっといいことが出来るよ

Build Configurations

  • SwiftとObjective-Cは、条件付きコンパイルで違うところがあるよ
  • Swiftはビルド設定に従って条件付きコンパイルが行われるよ
  • ビルド設定には、文字列や数値やコマンドラインの設定やプラットフォームを調べる関数とかが含まれるよ

メモ: いろいろ、要確認

#if build configuration
    statements
#else
    statements
#endif

Mix and Match

Swift and Objective-C in the Same Project

  • SwiftとObjective-Cの両方を、1つのプロジェクトで使うことが出来るよ
  • これを『Mix and Match』って言うよ

Importing Objective-C into Swift

  • Objective-CのファイルをSwiftを使ってるプロジェクトに取り込む場合、Swiftへのブリッジヘッダが必要になるよ
  • Xcodeがブリッジヘッダを作るか尋ねてくるから、許可すれば良いよ
  • ファイル名は、モジュール名の後ろに『-Bridging-Header.h』を付けたものになるよ

To import Objective-C code into Swift from the same target

  • 1.ブリッジヘッダにSwiftで使いたいヘッダファイルを書くよ
#import "XYZCustomCell.h"
#import "XYZCustomView.h"
#import "XYZCustomViewController.h"
  • 2.ブリッジヘッダのビルド設定を確認するよ
    コードが生成されるパスは、直接、それ自身を参照するよ。

メモ: 通常は設定を変更する必要はない? 要確認

  • ブリッジヘッダに書かれたObjective-Cの要素は、Swiftで自動的に使えるようになるよ
    import文は必要ないよ。

Importing Swift into Objective-C

  • SwiftのコードをObjective-Cから使う場合、Xcodeが生成したヘッダーファイルが必要になるよ

Importing External Frameworks

Using Swift from Objective-C

Migration

メモ: 特に気になるところはなし


とりあえず終了。 (2014/06/19)