このページは「はじめてのSwiftプログラミング」(清水美樹著、工学社刊、2014年8月23日発売、ISBN978-4-7775-1851-7)の著者によるサポートページです

目次へ

このサイトのトップへ

仕様変更情報

Swift 1.1までに行われた変更

列挙体の「toRaw」「fromRaw」が廃止される(Xcode 6.1から)

本書第8章で実践した「列挙体」で、メソッドtoRawとfromRawがなくなっています。
代わりに、以下のように書きます。


「AnyObject」から「Any」に

(Xcode 6.0から)

Swiftでは、「すべてのオブジェクトを包括するデータ型」として、「Any」を使用することになりました。
これまで使用できた「AnyObject」はコンパイルエラー、または実行エラーを引き起こします。


ダウンキャストの種類が限定される

第4-2節において「AnyObject(以後はAny)」で値を定義すれば、 小数のように書かれた値を整数にダウンキャストできる例を示しましたが、これができなくなりました。
ただし、小数のように書かれた「Any」型の値を、小数にダウンキャストすることはできます。


ディクショナリの値がいろいろのデータ型をとる場合

第5-2節においてディクショナリの「値」がいろいろなデータ型をとる例を示しましたが、 これにはあらかじめデータ型を「キーは文字列、値はAny」のように指定する必要がでてきました。

本書のサンプルをiOSプログラムとして実行する場合

本書の以下のサンプルをiOSプログラムとして実行する場合は以下の注意が必要です。


リスト8-2-11からリスト8-2-19

このプログラムでは、「関数が関数を呼び出す」構造をとっています。基本的にはこの構造は全然問題ないのですが、iOSプログラムに載せる場合、「関数」をさらにメソッド「ViewDidLoad」に入れる必要があります。

メソッドの中に入ると関数は「ローカル関数」となります。そして、「ローカル関数」は互いに参照し合えないという規則が、この時点でできました(また変わるかも知れませんが)

図1 全ての関数をメソッド「ViewDidLoad」に入れるとエラーになる

回避法は以下の通りです。
4つの関数のうち、最終的に結果を出す関数「bSearch」以外の3つについて、その定義を、メソッド「viewDidLoad」の外に出します。
ただし、3つの関数はいずれもストラクチャ「Book」を参照しますので、ストラクチャBookの定義も3つの関数と同じ位置に移動します。


リスト8-3-1からリスト8-4-8

上記と同じ考えです。結果を与える関数「reportHeightSize」が参照する関数「yourSize」のほうを、メソッド「viewDidLoad」の外に出します。


リスト9-6-1からリスト9-6-12

このプログラムは、「Playground」中であれば問題なく動きますが、iOSプログラムとして書くと、コンパイルエラーは出ませんが実行エラーになります。
本書リスト9-6-4にある、図2の部分で「BAD_ACCESS」というエラーが出て止まります。これは、「メモリ・エラー」です。

図2 メモリ・エラーが出る

これは、Swiftのバグと考えられています。
しかし回避法があります。プロトコル「App」と「MyDelegate」の二つの定義に「@objc」の修飾子をつけてください。これは、「SwiftではなくObjective-Cのオブジェクトである」という注釈です。

図3 「@objc」をつける

これで実行されます。
でも、こんなことをしなければならないのならSwiftを書く意義がかなり減りますから、やはりバグでしょう。次のアップデートでどうなるか、また報告します。


目次へ

このサイトのトップへ