2016-01-23 222 views
3

Xcode 7.2,Swift 2.0: 下面的代碼在調試區域打印「15()」。我本來期望它打印「15 1」。爲什麼要打印括號?Swift playground打印圓括號

var n = 15 
print(n, n /= 10) 
+2

如果您有一個「意外」結果:1)使用編譯的項目代替,診斷消息有時會更好。 - 2)將表達式拆分成單獨的步驟。在你的情況:'讓foo = n/= 10'導致*「警告:常量'foo'被推斷爲類型'()',這可能是意想不到的」*。 - 3)按住Command鍵並點擊Xcode中的'/ ='運算符,這表明它沒有返回值。 –

+0

良好的建議,除了這種情況下,診斷信息只是說意外的結果「可能是意想不到的」! –

+0

我的意思是'推斷有類型'()''... –

回答

2

因爲從賦值操作符沒有返回任何內容。 它仍然執行。

在這裏看到的文檔:Swift Docs

賦值運算符(=)不返回值,以防止它從 被錯誤使用時,等於運算符(==)是 意圖。

5

這是因爲n /= 15表達式返回Void,因爲/=運營商斯威夫特返回Void。我們可以看到,從它的聲明:

public func /=<T : _IntegerArithmeticType>(inout lhs: T, rhs: T) 

而由於雨燕,Void是空的元組的別名:

/// The empty tuple type. 
/// 
/// This is the default return type of functions for which no explicit 
/// return type is specified. 
public typealias Void =() 

第二個參數/表達傳遞給print被打印爲()

+0

這是這個問題的更好答案。 – rambossa

+0

這是非常慷慨的你。然而,你的回答中有足夠的信息來推斷髮生了什麼。 (事實上​​,我實際上是從一個評論中的答案推斷出一個更早但不正確的答案,然後刪除了這個答案,並對其進行評論。)後面的答案確實比較好,但可能會更好已經從你的答案中派生出來。如果是這樣,它應該被授予信貸嗎?這比我想象的要複雜得多! –

+0

@ VinceO'Sullivan如果Michael的帖子回答了你的問題,那麼你不需要改變任何問題的狀態。如果你發現我的答案有用,那麼你可以對它投票。沒有必要採取進一步行動。 – Cristik