当我直接用另一个整数变量添加整数值(即:1,2,3等)
let arr:Array = ["One","Two"]
var valueT:Int64 = 0
value = arr.count + 1 //in this line
我收到以下警告:
'+' is deprecated: Mixed-type addition is deprecated. Please use explicit type conversion.
我用:
修正了警告value = Int64(value + 1)
虽然已修复,但我想知道为什么称为混合型添加,因为我没有使用 ++ 。还有一种更好的方法来修复swift 3.1中的警告吗?
更新
以下图片是警告的证明。我正在使用Xcode版本8.3(8E162)。
allROR
这里是一个数组。
答案 0 :(得分:10)
编辑:要使用您的代码生成错误,它应该像
let value = 5
let result: Int64 = value + 1
现在你收到警告
' +'不推荐使用:不推荐使用混合类型添加。请使用显式类型转换。
但看起来警告有误导性,因为value
和1
都属于Int
类型,所以它的总和也是Int
所以你需要简单地转换结果到Int64
,这就是你正在做的事情,这是完全可以的。
let result: Int64 = Int64(value + 1)
答案 1 :(得分:3)
回答这一部分: 为什么称为混合型添加
使用Nirav D的简化示例:
let value = 5
let result: Int64 = value + 1
您可以按住Command键并单击+
,然后查看Collection
生成的界面:
(当然,索引完成后。)
@available(swift, deprecated: 3.0, obsoleted: 4.0, message: "Mixed-type addition is deprecated. Please use explicit type conversion.") public func +<T>(lhs: T.Stride, rhs: T) -> T where T : SignedInteger
因此,在上面的代码示例中,1
的类型推断为Int64
,而Int64.Stride == Int
,操作value + 1
与签名{{1}匹配}。
此弃用包含在修订版SE-0104 Protocol-oriented integers中,此部分:
标准库不再为Strideable类型提供+和 - 运算符。
他们是有问题的,因为人们可以编写像混合类型的代码 设x:Int64 = 42; x + =(1作为Int),这将编译,但是 不该&#39;吨。此外,由于签署了无符号类型的Stride, 标准库必须实现一个hack来制作像x:UInt这样的代码 = 42; x + =(1为Int)模糊不清。这些运营商只是必要的,因为它们使得收集指数的推进变得方便,这是不对的 自从引入新的索引模型以来,情况更长 斯威夫特3。
正如您已经看到的,您可以通过多种方式避免此警告。
答案 2 :(得分:2)
数据类型不同就是它显示错误的原因
您需要同时生成相同数据类型的变量和常量
例如。
let result = value + Int64(1) //in this line