Is there a safe way to "convert" a CGFloat to a NSNumber ?
NSNumber has the numberWithFloat: and numberWithDouble: methods but CGFloat being defined as float or double depending on the platform, it seems risky to use either one of them.
或者numberWithDouble:安全使用a CGFloat,因为它是更精确的?
试图在返回`CGFloat的函数中进行算术运算,我得到一个错误:
找不到接受提供的参数的'/'的重载
func kDCControlDegreesToRadians(x : CGFloat) -> CGFloat
{
return (M_PI * (x) / 180.0) // error is here.
}
Run Code Online (Sandbox Code Playgroud)
还有其他人见过这类问题吗?
我的应用程序中有更多问题.我的错误如标题所示:
错误1:'CGFloat'无法转换为'Float'
第1和第2错误的代码:
self.setPositionRelativeBot(pipeBot, x: xx, y: offset)
self.setPositionRelativeTop(pipeTop, x: xx, y: offset + space)
Run Code Online (Sandbox Code Playgroud)
这是整个功能:
func spawnPipeRow(offs: Float)
{
let offset = offs - space / 2
let pipeBot = mainPipe.copy() as Pipe
let pipeTop = mainPipe.copy() as Pipe
pipeBot.texture = SKTexture(imageNamed: "BotPipe")
pipeTop.texture = SKTexture(imageNamed: "TopPipe")
pipeBot.texture!.filteringMode = SKTextureFilteringMode.Nearest
pipeTop.texture!.filteringMode = SKTextureFilteringMode.Nearest
pipeBot.isBottom = true
let xx = self.view!.bounds.size.width
self.setPositionRelativeBot(pipeBot, x: xx, y: offset)
self.setPositionRelativeTop(pipeTop, x: xx, y: offset + space)
pipeBot.physicsBody = SKPhysicsBody(rectangleOfSize: pipeBot.size)
pipeTop.physicsBody = …Run Code Online (Sandbox Code Playgroud) 我在Xcode中编译项目时遇到错误,它说:
表达太复杂,无法在合理的时间内解决; 考虑将表达式分解为不同的子表达式
这是代码:
static func random(min: CGFloat, max: CGFloat) -> CGFloat {
return CGFloat(Float(arc4random()/0xFFFFFFFF) * (max - min) + min)
}
Run Code Online (Sandbox Code Playgroud) 给定一个未设置的浮点数时,我有一个方法需要做一个不同的方法,而不是一个值为0的浮点数.基本上,我需要检查一个变量是否已经存在,如果它的值为0则将其计算为set .
那么,我应该使用哪个占位符作为未设置值(nil,NULL,NO等)以及如何测试变量是否未设置而不为值0返回true?
我已经在我的.m文件中定义了一些常量,我需要从我的swift代码中访问它.它们被定义为:
const CGFloat testValue = 40.0;
Run Code Online (Sandbox Code Playgroud)
在我的其他objective-c .m文件中,我可以使用extern以下方法访问它们:
extern const CGFloat testValue
Run Code Online (Sandbox Code Playgroud)
是否有一种等效的方法可以从.swift文件中访问这些常量?
我应该用postfix编写CGFloat值f吗?
CGFloat fValue = 1.2;
Run Code Online (Sandbox Code Playgroud)
与
CGFloat fValue = 1.2f;
Run Code Online (Sandbox Code Playgroud)
我知道这个后缀定义了一个浮点值.但它是否有必要,是否有意义,使用这两者之间是否有任何性能差异,或者这只是视觉呈现,因此您可以快速定义值类型(例如,在这种情况下浮动)?
假设我有CGFloat的这个扩展名
extension CGFloat {
// common
public var thrice: CGFloat { return self * 3.0 }
public var twice: CGFloat { return self * 2.0 }
public var half: CGFloat { return self * 0.5 }
public var third: CGFloat { return self / 3.0 }
public var fourth: CGFloat { return self * 0.25 }
public var sixth: CGFloat { return self / 6.0 }
public var eighth: CGFloat { return self * 0.125 }
public var twelfth: CGFloat …Run Code Online (Sandbox Code Playgroud) 众所周知,CGFloat(在CoreGraphics,UIKit等中无处不在)可以是32位或64位浮点数,具体取决于处理器架构.
在C中,CGFloat它是一个typealias到float或double,在Swift则它被定义为struct CGFloat具有native属性(其是Float或Double).
已经多次观察到NSNumber可以从被创建并转换为Float和Double,但有从与存在不相似的转换CGFloat.一般建议(例如在Swift中将CGFloat转换为NSNumber)是通过转换Double
CGFloat <--> Double <--> NSNumber
Run Code Online (Sandbox Code Playgroud)
例:
let c1 = CGFloat(12.3)
let num = NSNumber(double: Double(c1))
let c2 = CGFloat(num.doubleValue)
Run Code Online (Sandbox Code Playgroud)
这很简单,也没有精确度.此外,大多数平台现在都是64位,然后CGFloat/Double
转换很简单,可能由编译器优化.
然而,这引起了我的好奇心,如果转换可以做到
无需促进CGFloat到Double32位平台.
可以使用构建配置语句(例如,应该使用条件编译来处理不同体系结构中CGFloat的差异吗?):
extension NSNumber {
convenience init(cgFloatValue value : CGFloat) {
#if arch(x86_64) || arch(arm64) …Run Code Online (Sandbox Code Playgroud) CGSize(width: 360, height: 480)并且CGSizeMake(360, 480)似乎有同样的效果.对另一个人更喜欢吗?有什么不同?
cgfloat ×10
swift ×7
ios ×4
objective-c ×3
nsnumber ×2
xcode6 ×2
arc4random ×1
cgsize ×1
constants ×1
double ×1
equality ×1
performance ×1
types ×1
undefined ×1
xcode ×1