引数に渡されるオブジェクトの型によって、引数の型を変更したい。シンプルな書き方は？


下のように書いていますが、もっとシンプルな書き方はありせんか？ 重複した部分が多く、冗長な気がするのですが。

[code]

    func addSomeButton(view:AnyObject) {
    
    
        let viewForMyButton = UIView()
    
        //...
    
    
        //Viewにボタン追加
        if view is UITextView {
            (view as! UITextView).inputAccessoryView = viewForMyButton
        } else if view is UITextField {
            (view as! UITextField).inputAccessoryView = viewForMyButton
        }
    }
    
[/code]




そもそものメソッドを分割してしまうと言う手もありますね。

[code]

    func addSomeButton(view: UITextView) {
        let viewForMyButton = UIView()
    
        // 共通の処理は別メソッドにくくり出す
    
        view.inputAccessoryView = viewForMyButton
    }
    
    func addSomeButton(view: UITextField) {
        let viewForMyButton = UIView()
    
        // 共通の処理を呼ぶ
    
        view.inputAccessoryView = viewForMyButton
    }
    
[/code]

* * *

他の方も書かれていますが『シンプルな書き方』は受け取る人によって変わるでしょうし、自分が好きなようにやれば良いと思いますよ。




`inputAccessoryView` は `UITextView` と `UITextField` の共通の祖先 `UIResponder`
のプロパティですから、

[code]

    if view is UIResponder {
        (view as! UIResponder).inputAccessoryView = viewForMyButton
    }
    
[/code]

という感じでよろしいのではないでしょうか。

パラメータ `view` の型を `UIResponder` か `UIView` に変更できれば、型判定も `as` も必要ありません。

(追記)  
コメントで指摘があったように、この回答は間違いです。動きません。

