少し前に販売された参考書を使用しているため、現在のswift仕様と違っているのか、参考書と同じ記述をしてもエラーが表示されます。
プロトコルについての箇所なのですが
通常の「批准したら実装しなければならいメソッド」と違い「批准しても実装しなくていいメソッド」として
オプショナルなメソッドをプロトコル内で宣言するプログラムです。
(コード内容は少し変えてあります)
swift
1// 通常のプロトコル 2import UIKit 3 4protocol testProtocol { 5 func calc() 6} 7 8class Test: testProtocol { 9 func calc() { 10 print(2 * 2) 11 } 12} 13 14var test = Test() 15test.calc()
実行結果: 4
上記まで動くのですが、次のようにoptionalメソッドを追加する記述をするとエラーが表示されます。
swift
1//オプショナルメソッドを利用したプロトコル 2import UIKit 3 4protocol testProtocol { 5 func calc() 6 // 加えた部分。この行がエラーになる 7 optional func calc2() 8} 9 10↓以下同文
エラー: 'optional' can only be applied to members of an @objc protocol
参考書ではこのようにプロトコル内で
「optional func メソッド名()」
のように、optional修飾子を記述すればそのメソッドの実装は選択可能となり、クラス内で実装してもしなくてもいいと書かれているのですが、上記のエラーが表示されます。
調べてみると「@objc protocol プロトコル名」と記述すればいいと載っていたので、その通り書き加えました。
すると今度は、プロトコルの部分ではエラーにならなかったのですが、その次の「testProtocolプロトコル」を批准した「Testクラス」の箇所で下記のようなエラーが表示されました。
swift
1import UIKit 2 3@objc protocol testProtocol { 4 func calc() 5 optional func calc2() 6} 7 8// ここでエラー発生 9class Test: testProtocol { 10 func calc() { 11 print(2 * 2) 12 } 13} 14 15var test = Test() 16test.calc()
エラー: Type 'Test' does not coform to protocol 'testProtocol'
意味は「プロトコルで宣言したメソッドが定義されていない場合に発生するエラー」のようなのですが、それを省略するためにoptional修飾子をつけた筈なので、どこをどう直せばいいのかよくわかりません。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/17 10:14