Everyone can code chap.12でもエラー

前回に続けてエラーに苦しむ

前回の投稿の後も継続的に勉強を進めています。12章のインスタンス・メソッド・プロパティにおいてもエラーが出ましたので記録します。

指示されたメソッドが無い

演習問題 貨物用エレベータの設問を解いていると

TreehousePulley型のaddLoadToBasketメソッドを使って、上で定義したアイテムを追加してください

Everyone can code

と出題があります。しかし、TreehousePulley型のインスタンスに.(ドット)をつけても補完の候補にaddLoadtoBasketが表示れません。

一旦、教師側のテキストを参照してみたところ、特別な処理もなく、addLoadToBasketが使われていました。再度生徒側テキストで無理やりaddLoadToBasketを参照しようとすると以下のエラーが出ました。

‘addLoadToBasket’ is inaccessible due to ‘internal’ protection level

addLoadToBasketがinternalとして保護されているんだと思います。保護の問題でなく、仮にメソッド自体が存在しない場合は以下になるはず

Value of type ‘TreehousePulley’ has no member ‘addLoadToBasket’

ソースコードの修正作業を行う

ではaddLoadToBasketをpublicにしてあげればいいんだろう、と予想しました。
ソースコードを見てみます。ナビゲーションで演習問題貨物用エレベーター > Sources > FreightElevator.swiftを選びます。

以下の二行がpublicになっていなかったのでpublicを追加します。

mutating func removeLoad(loadWeight: Int) {
mutating func addLoadToBasket(loadWeight: Int) {

これで無事アクセスできるようになりました。

もう一つ間違いが・・・

とりあえず使えるようになったので演習を進めていくとどうもうまくいかないです。これはcanHandleAdditionalLoadにバグが混じっているためです。こちらは実際にコードを見ていただけばよくあるケアレスミスなので回答までは記載しないです。

canHandleAdditionalLoadは使わないでもコーディング可能ですが、currentWeightプロパティがPrivateに設定されていることからも使うことが前提で問題が組まれていると思います。

直るといいな・・・

せっかくクラス・構造体を使うとコーディングがブラックボックスでもできますよという演習なのに、ブラックボックスのデメリットをいきなり目の当たりにすることになるので、演習目的とは異なるエラーでは無いかと思います。

ついでに、直った時を見越すと、Playgroundのバージョンがわからないのでバージョニングをしてもらいたいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です