2016-10-14 17 views
1

スイフト3のAnyObjectタイプがAnyに設定されているため、 しかし、送信者タグにアクセスできないようです。迅速に送信者の身元を取得する方法3

私は、最初の送信者がANYOBJECTたときには、スウィフト2によく働い

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if (saveButton === sender) { 
     let name = nameField.text ?? "" 
     program = Program(id: -1, name: name, type: capsulesTypes![typeSelected], planning: planningString, date: timePicker.date.timeIntervalSince1970, intensity: Int(intensitySlider.value), enabled: false) 
     sendProgramToAPI(program!) 
    } 

を持っていました。しかし、今の状態は常に間違っています。だから私はタグを使ってみました。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
if (saveButton.tag == sender.tag) { 
    let name = nameField.text ?? "" 
    program = Program(id: -1, name: name, type: capsulesTypes![typeSelected], planning: planningString, date: timePicker.date.timeIntervalSince1970, intensity: Int(intensitySlider.value), enabled: false) 
    sendProgramToAPI(program!) 
} 

エラーが発生しましたか?メンバータグはありません。タグは、基本的には空間と時間が永遠に失われています。

何らかの理由で送信者を識別するためのアイデアはありますか?

+0

__1 .__型キャスト、__2 .__インスタンスのプロパティへのアクセス。 – holex

答えて

4

送信者のタイプをキャストする必要があります。あなたは送信者が常にUIButtonであることが確実な場合は、次の操作を行うことができます

if saveButton.tag == (sender as! UIButton).tag { 

それとも、あなたはむしろtagプロパティを使用したくない場合、これはあまりにも動作するはずです:

if saveButton == (sender as! UIButton) { 

を希望を助ける:)

+0

神様。私は、「私が単純なボタンを最初に扱っていたのを忘れてしまったということで、私はとても混乱しました。ありがとよ! –

+0

あなたは大歓迎です! – LinusGeffarth

+1

これらの括弧はすべて必要ありません。また、私は強制的なキャストを伴わないより安全なアプローチをお勧めします: 'guard let button = sender as? UIButton、ボタン=== saveButton else {return} ' –

0

あなたの最初の方法は優れていた。それを使用するには、AnyObjectにキャストするだけです。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if (saveButton === sender as AnyObject) { 
関連する問題