>

2015年5月6日水曜日

swiftからobjective-cの関数を呼び出す時にエラーになる件

swiftから複数の引数を持つobjective-cの関数を呼び出そうとすると
Cannot invoke 'func' with an argument list of type
とか
Missing argument labels
みたいなエラーが出て困った件。

原因は次の二点だったのでメモ。

  • objective-cの関数の引数の型がintの場合はswiftではInt32の変数を入力しなくてはならない。Intではダメ。
  • objective-cの関数の引数のラベルもswiftのコードで記述しなくてはダメ。
以上をまとめるとswiftでは次のような呼び方をすることでコンパイルに通るようになった。味噌はInt32に変換していることと、二つ目以降の変数の前にコロンで区切ってラベル名(この例ではmon, mday)を記述していること。
MyClass.test(Int32(year), mon:Int32(month), mday:Int32(day));

startUpdatingLocationが常にerrorになる件

ちょっと面白いアイディアを思いついたのでiOSアプリ開発に挑戦することに。
ちなみに言語はswift、iOSは8を想定。

で、さっそくGPS情報を取得するところでつまずいた。plistも編集してコーディングしてもstartUpdatingLocationで常に結果がエラーになる。

原因は下記のサイトにある通りでシミュレータにLocationの設定をする必要があるらしい。
http://shirokai.hatenablog.com/entry/swift-gps

ただし、自分の環境ではLocationをCustom Locationに設定してもerrorのままだったので一度Locationの選択でAppleを選択したりCustomに戻したりしてみたら正常に動くようになった。