' +'不推荐使用:Swift 3.1中不推荐使用混合类型

时间:2017-05-11 06:25:27

标签: swift swift3 addition

当我直接用另一个整数变量添加整数值(即: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)。

enter image description here

allROR这里是一个数组。

3 个答案:

答案 0 :(得分:10)

编辑:要使用您的代码生成错误,它应该像

let value = 5
let result: Int64 = value + 1

现在你收到警告

  

' +'不推荐使用:不推荐使用混合类型添加。请使用显式类型转换。

但看起来警告有误导性,因为value1都属于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