2016-09-16 10 views
4

私が互いに異なる2「同様の機能を」作るのだろうか。これは私が独自性から来て自習Swiftの2つの機能を正確に区別するにはどうすればよいですか?

から学んだことで明確に

呼び出すことができます。関数名+引数の順序と引数名+戻り値の型。それらの組み合わせは、機能を一意にするためにできることは一意である必要があります(以下の例を参照してください)

  1. Nmu1Num2戻り値の型は、(いわゆるリターン名前を持っていないため、あいまいな原因となります、関数名は既にこの役割として機能)Num3関数が異なるパラメータ名を持っていますが、それは一意Num1で機能から分離し、Num2ません

  2. 関数を呼び出すときに参照されていません。したがって、関数が呼び出されたときに引数名は参照されないため、異なる引数名では関数が一意になりません。 Num4の関数は、関数名+引数の順番と引数名+戻り値の型が以前の3つの関数すべてで一意であるため、上のすべての関数と異なります。私は欠場か可能性もいくつかの部分を誤解かもしれません:彼らは

    //Num1 
    func foo(guy name: String) -> String { 
        return "Hi \(name)" 
    } 
    
    //Num2 
    func foo(guy name: String) { 
        print("Hi \(name)") 
    } 
    
    //Num3 
    func foo(guy called: String) -> String { 
        return "Hi \(called)" 
    } 
    
    //Num4 
    func foo(dude name: String) -> String { 
        return "What's up \(name)" 
    } 
    
    //Num5 
    func foo(man name: String, from place: String) { 
        print("Hi! I'm \(name) I come from \(place)") 
    } 
    
    //Num6 
    func foo(from place: String, man name: String) { 
        print("Hi! I'm \(name) I come from \(place)") 
    } 
    

質問を定義したとき、彼らは異なる引数の注文を持っているため

  • Num5Num6機能は、互いに異なっています。のは、この問題についてもう少し議論してみましょうあなたが私を修正して、私は

    おかげ

    を逃した部品を追加することができます[更新] あなたの非常にいいだろう。 the difference between Argument and Parameterについて議論する質問から始めましょう。この質問はここで非常に意味をなさない!

    戻る公式迅速文書

    からの引用への各関数のパラメータは、引数のラベルとパラメータ名の両方を持っています。引数labelは、関数を呼び出すときに使用されます。各引数は、その前に引数のラベルを付けて関数呼び出しに書き込まれます。パラメータ名は、関数の実装で使用されます。デフォルトでは、パラメータは引数名としてパラメータ名を使用します。

    引数、パラメータ、引数ラベルとパラメータ名が異なります。ここでの違いは、微分関数に使用できます。

    同じパラメータ名、同じパラメータの順番、同じ戻り値の型、同じ関数本体の関数は、異なる引数のラベルと区別できます。詳細については

    func foo(dude name: String) -> Int { 
        print("Hi \(name)!") 
        return 1 
    } 
    
    func foo(man name: String) -> Int { 
        print("Hi \(name)!") 
        return 1 
    } 
    
    //foo(dude: String) & foo(man: String) is identical when calling 
    

    のObj-C-互換のメソッドとして定義されMultiple functions with the same name

  • +1

    HTTPを参照してください。 ://stackoverflow.com/questions/27690076/multiple-functions-with-the-name-name。 –

    +0

    @MartinRありがとうございます。それは多くの助けになります! – SLN

    答えて

    3

    に対処してください、Num1をとNum2を一緒に存在することはできません、あなたはNSObjectサブクラスで定義するエラーを持つことになります。しかし、あなたが@nonobjcとしてそれらをマークすることができますし、エラーが消えます、予想される戻り値の型によって正しい過負荷を選択することがスウィフト以来:

    //Num1 
    @nonobjc func foo(guy name: String) -> String { 
        return "Hi \(name)" 
    } 
    
    //Num2 
    @nonobjc func foo(guy name: String) { 
        print("Hi \(name)") 
    } 
    

    あなたのすべての他の点、このマークを除いて、私には正しいようだ

    関連する問題