我如何处理Int和CGFloat之间的操作?

dri*_*ing 17 objective-c swift

在Objective-C中,我可以执行以下操作:

Objective-C代码:

CGFloat width = CGRectGetWidth(mView.bounds);
CGFloat total = width*[myArray count];
Run Code Online (Sandbox Code Playgroud)

但在Swift中,它会引发一个错误:

找不到接受提供的参数的'*'的重载

我怎样才能优雅地避免这种情况?

Sul*_*han 33

首先,让我们创建一些演示数据

let array: NSArray = ["a", "b", "c"] //you could use a Swift array, too
let view = UIView() //just some view
Run Code Online (Sandbox Code Playgroud)

现在,其他一切的工作方式与Obj-C几乎相同

let width: CGFloat = CGRectGetWidth(view.bounds)
Run Code Online (Sandbox Code Playgroud)

或者干脆

let width = CGRectGetWidth(rect) //type of the variable is inferred
Run Code Online (Sandbox Code Playgroud)

和总数:

let total = width * CGFloat(array.count)
Run Code Online (Sandbox Code Playgroud)

请注意,我们必须添加一个CGFloat强制转换array.count.Obj-C会隐式转换NSUIntegerCGFloat但是Swift没有隐式转换,所以我们必须添加一个明确的转换.


Das*_*ash 8

在Swift中,你不能直接乘以两个不同类型的数字(NSNumber,Int,Double等).CGRect的宽度是浮点类型,数组计数是整数类型.这是一个有效的例子:

let myArray: Int[] = [1,2,3]
let rect: CGRect = CGRect(x:0,y:0,width:100,height:100)
let total: Double = rect.size.width * Double(myArray.count)
Run Code Online (Sandbox Code Playgroud)