時,我有簡單的代碼如下:錯誤分配函數變量
var println = print;
println("test");
它給我的錯誤:missing argument for parameter #2 in call
。我添加了更多參數:
println("test",".","\n");
它仍然給我同樣的錯誤。爲什麼會發生?
時,我有簡單的代碼如下:錯誤分配函數變量
var println = print;
println("test");
它給我的錯誤:missing argument for parameter #2 in call
。我添加了更多參數:
println("test",".","\n");
它仍然給我同樣的錯誤。爲什麼會發生?
這裏是print
函數的定義:
public func print(_ items: Any..., separator: String = default, terminator: String = default)
當你得到它的引用,你丟棄的命名參數,如造成所有的投入都被視爲因爲Any...
的items
的元素是不預定義數量的參數。在這樣的定義下,沒有辦法提供separator
和terminator
。
她是函數類型,因爲它們是由斯威夫特看到:
因此,這會產生一個漏洞,當你參考一個這樣的函數來參考vardiac params時,你將永遠無法稱之爲成功?我注意到,當你引用func時,它總是會丟棄標籤? – texasbruce
對。我用圖像更新了一個答案,以顯示作爲代碼轉換結果的'print'和'println'的實際函數簽名。我想你需要爲它創建一個雷達。我假設這樣一個任務應該繼承原始函數的所有屬性。 –
@texasbruce我想我的答案是你的問題的答案? ;) –
要不是有你需要做的是這樣一些非常具體的原因,這應該實現儘管處於更迂迴的方式:
func println (_ items: Any..., separator: String = " ", terminator: String = "\n") {
for item in items {
print(item, separator: separator, terminator: "")
}
print(terminator, separator: "", terminator: "")
}
println("test")
println("test",".","\n")
在您的錯誤消息之下,'我n call',它是否有專門指向'println'調用的'^',還是有另一個引用? – gravity
'var println = print'的目標是什麼。爲什麼不使用'typealias'? – JAL
@JAL'typealias'只適用於類型,而不是函數;) – Hamish