这是一个非常简单的问题,但它一直困扰着我。根据Swift的说法,不可能将不同类型的值加在一起(比如String和Int),即使它一起添加类型Date和类型Int,下面的代码如何工作呢?
IEnumerable<Control> allTxtBxs = GetAllControlsOfType(this, typeof(TextBox));
foreach (TextBox txtBx in allTxtBxs)
{
txtBx.ForeColor = Color.HotPink;
}
答案 0 :(得分:3)
在Date
的文档页面上,您可以看到
有一个+
运算符将Date
和TimeInterval
作为操作数:
返回添加了指定时间量的日期
static func +(lhs: Date, rhs: TimeInterval) -> Date
因此,您可以添加TimeInterval
(Double
的类型别名)
到Date
,但不是Int
。您的代码编译是因为2828282
是一个&#34;数字字面&#34;并且编译器可以从中推断出类型
上下文为Double
。
这不会编译:
let delta = 2828282 // an Int
let someDate = Date() + delta
// error: binary operator '+' cannot be applied to operands of type 'Date' and 'Int'
您必须将Int
转换为TimeInterval/Double
let delta = 2828282 // an Int
let someDate = Date() + TimeInterval(delta)
或使delta
成为Double
:
let delta = 2828282.0 // a Double
let someDate = Date() + delta
答案 1 :(得分:1)
根据Swift的说法,不能将不同类型的值添加到一起(例如
String
和Int
)
与许多其他语言不同,数字类型之间没有自动转换,即数字促销,并且大多数预定义数字运算符都希望两个操作数具有相同的类型。
然而,Swift中没有任何内容可以阻止使用不同类型操作数声明运算符,并且您的示例Date() + 2828282
是使用不同操作数类型定义预定义运算符的示例。
因此与Swift的区别在于缺少自动数字促销,而且realVar + intVar
这样的组合没有预先定义。
在许多其他语言中,组合也未预先定义,但存在数字促销,因此示例编译为realVar + real(intVar)
。
HTH