首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Swift中将CGFloat强制转换为Float

在Swift中将CGFloat强制转换为Float
EN

Stack Overflow用户
提问于 2014-06-11 01:42:14
回答 3查看 88.2K关注 0票数 97

我需要将一个值存储为Float,但是源数据是一个CGFloat

代码语言:javascript
运行
复制
let myFloat : Float = myRect.origin.x

但这会导致编译器错误:“NSNumber”不是子类型“Float”

因此,如果我显式地将其转换为:

代码语言:javascript
运行
复制
let myFloat : Float = myRect.origin.x as Float

但这又会导致编译器错误:“无法将表达式的类型'Float‘转换为’Float‘”

有什么正确的方法可以做到这一点并满足编译器的要求?

EN

Stack Overflow用户

发布于 2014-06-11 02:04:09

通常,最好的解决方案是保留类型并使用CGFloat,即使在Swift中也是如此。这是因为CGFloat在32位和64位机器上具有不同的大小。

关键字as只能用于动态转换(用于子类),例如

代码语言:javascript
运行
复制
class A {
}

class B : A {
}

var a: A = B()
var b: B = a as B

然而,DoubleIntFloat等不是彼此的子类,因此要“强制转换”你必须创建一个新实例,例如

代码语言:javascript
运行
复制
var d: Double = 2.0
var f: Float = Float(d) //this is an initialiser call, not a cast
var i: Int = Int(d) //this is an initialiser call, not a cast
票数 13
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24147568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档