2016-10-18 19 views
1

Apple DeveloperのFoodTrackerチュートリアルに従おうとしています。今は「Implementing Navigation」のセクションにあります。'UIBarButtonItem!'型の値を変換できません。予想される引数型 '_OptionalNilComparisonType'

このチュートリアルは、オーバーライドされたメソッドシグネチャを変更することなくコードが動作しないため、以前のバージョンのSwift用に作成されたようです。ここで

は例です:Xcodeの(8.0)の私のバージョンで

// This method lets you configure a view controller 
// before it's presented. 
override func prepareForSegue(segue: UIStoryboardSegue, 
    sender: AnyObject?) { 

その方法をに変更することがあります。それは親に適切な方法と一致するように...

override func prepare(for: UIStoryboardSegue, sender: Any?) 
    { 

クラス/プロトコルをオーバーライドする必要があります。

チュートリアルは、次のコード行を続行:

if saveButton == sender { 

...件名にエラーを生成します。

私はここ数時間、オンラインで検索して、オプションの送信者であることを理解しようとしましたか? UIBarButtonItemと一致しませんが、失敗しました。最後の手段としてここに投稿しています。私はiOSの開発に関するいくつかの書籍に従ってみたいと思っていましたが、コードにも問題がありました(Xcode(8.0)/ Swift(3)の現在のバージョンでは動作しません) Appleの公式チュートリアルの時間。あなたが提供することができます任意の助けを事前に

おかげで。

+0

を私がいることを追加したいです – PixelStack

+0

スウィフトは強いタイプのシステムを持つ言語です.2つのアイテムを比較するには、mus同じである。 'Any'は共通の分母のようにSwiftの中で最も非特異的な型です。左側に別個の型がある場合は、右側に同じ型に 'Any'をキャストする必要があります。送信者が常に 'UIBarButtonItem'であることを知っていれば、それを強制的にキャストすることができます。複数のタイプの送信者がある場合にわからない場合は、オプションのバインドを使用してください。 – vadian

答えて

5

あなたはUIBarButtonItemとして(どれ?)あなたの送信者をキャストしようとしたことがありますか?

if saveButton == (sender as? UIBarButtonItem) 
+0

それはまさに解決策です!ありがとうございました。 – PixelStack

+0

ところで、ソースのダウンロードからプロジェクトを再開し、チュートリアルがSwift 2.3で作成されたことを知りました。プロジェクトを開くときに3.0に変換しないと、それは古いSwift構文で実行されます。 – PixelStack

関連する問題