2016-01-23 150 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