2014-08-30 3 views
0

Какова цель ключевого слова «с» в Swift? До сих пор я обнаружил, что ключевое слово можно использовать, если вам нужно переопределить существующую глобальную функцию, например, toDebugString.Быстрое «с» ключевое слово

// without "with" you get "Ambiguous use of 'toDebugString'" error 
    func toDebugString<T>(with x: T) -> String 

    { 
     return "" 
    } 

    toDebugString("t") 

ответ

14

with является не ключевое слово - это только внешний идентификатор параметра. Это работает так:

func toDebugString<T>(whatever x: T) -> String 

Поскольку функция toDebugString<T>(x: T) уже определена, используя внешний параметр, который вы создаете перегрузки: такое же имя функции, но различные параметры. В этом случае параметр один и тот же, но идентифицируется с внешним именем и в swift, что делает его методом с другой сигнатурой, а значит и перегрузкой.

Чтобы доказать, что, вставьте в детскую площадку:

func toDebugString<T>(# x: T) -> String { 
    return "overload" 
} 

toDebugString(x: "t") // Prints "overload" 
toDebugString("t") // Prints "t" 

Первый называет свой перегруженный реализации, в то время как второй использует существующую функцию

Рекомендуемая литература: Function Parameter Names

Смежные вопросы