2014-08-30 42 views
0

Swift中“with”关键字的用途是什么?到目前为止,我发现如果您需要覆盖现有的全局函数(如toDebugString),则可以使用该关键字。Swift“with”关键字

// 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