小编kas*_*lat的帖子

'CGFloat'不能转换为'UInt8'和其他CGFloat问题与Swift和Xcode 6 beta 4

如果这解决了问题,这里是原始的Objective-C代码.

int x = (arc4random()%(int)(self.gameView.bounds.size.width*5)) - (int)self.gameView.bounds.size.width*2;
int y = self.gameView.bounds.size.height;
drop.center = CGPointMake(x, -y);
Run Code Online (Sandbox Code Playgroud)

我开始使用这段代码.第2行和第3行都很好,我稍后会介绍它们.

let x = CGFloat(arc4random_uniform(UInt32(self.gameView.bounds.size.width * 5))) - self.gameView.bounds.size.width * 2
let y = self.gameView.bounds.size.height
dropView.center = CGPointMake(x, -y)
Run Code Online (Sandbox Code Playgroud)

在Xcode 6 beta 3中,有必要将arc4random_uniform UInt32结果转换为CGFloat,以使减号和乘法起作用.这不再起作用,编译器显示错误:

'CGFloat'不能转换为'UInt8'

发行说明指出:

"CGFloat现在是一个独特的浮点类型,它包含32位体系结构上的Float或64位体系结构上的Double.它提供了Float和Double的所有相同的比较和算术运算,可以使用数字文字创建使用CGFloat可以将代码与代码完全隔离,对于32位是好的,但在构建64位时会失败,反之亦然.(17224725)

我只是在做类型的错误吗?我甚至不知道如何更好地描述这个问题,向Apple提交一个错误报告给beta 4.几乎我所拥有的每一个Swift项目都会受到这个问题的影响.所以我是寻找一些理智.

xcode operator-overloading type-conversion cs193p swift

13
推荐指数
1
解决办法
1万
查看次数

'Class.Type'没有名为'variable'的成员错误只是缺少类变量支持?

我一直在尝试在类中使用常量和变量,这些类通过名称引用类级别的同一类中的其他常量和变量.AFAIK,从Xcode 6 beta 4开始,Swift仍然没有类变量支持.我想知道的是,在尝试引用其他常量(let)或变量(var)时我看到的错误是否仅仅是由于缺少类变量支持?

您可以引用方法内或类外的常量和变量,您似乎无法在类级别按名称引用.以下课程显示了几种变体以及您将在Xcode 6 beta 4中看到的错误.

这可以在游乐场或常规.swift文件中测试.

class Simple {

    let someConstant = 0.50

    var someVariable = 1

    // uncomment let and var lines to see the errors

    // error: 'Simple.Type' does not have a member named 'someConstant'
    // let referringConstant = someConstant
    // error: Use of unresolved identifier 'self'
    // let referringConstant = self.someConstant

    // error: 'Simple.Type' does not have a member named 'someVariable'
    // var referringVar = someVariable
    // error: Use of unresolved identifier 'self'
    // …
Run Code Online (Sandbox Code Playgroud)

xcode swift

13
推荐指数
1
解决办法
9895
查看次数

在Xcode 6 beta 5中使用+ =时'[(UIView)]'与'UInt8'不同.请改用append方法?

我正在使用+ =对数组进行UIView,而且似乎不再有效.这条线

dropsFound += hitView
Run Code Online (Sandbox Code Playgroud)

给出错误'[(UIView)]'与'UInt8'不同

这是方法的一部分.请注意,从Xcode 6 beta 5开始,hitTest现在返回一个可选项,因此有必要说

hitView?.superview
Run Code Online (Sandbox Code Playgroud)

代替

hitView.superview
Run Code Online (Sandbox Code Playgroud)

在'if'语句中.

func removeCompletedRows() -> Bool {
    println(__FUNCTION__)
    var dropsToRemove = [UIView]()

    for var y = gameView.bounds.size.height - DROP_SIZE.height / 2; y > 0; y -= DROP_SIZE.height {
        var rowIsComplete = true
        var dropsFound = [UIView]()
        for var x = DROP_SIZE.width / 2; x <= gameView.bounds.size.width - DROP_SIZE.width / 2; x += DROP_SIZE.width {
            let hitView = gameView.hitTest(CGPointMake(x, y), withEvent: nil)
            if hitView?.superview === gameView {
                dropsFound += …
Run Code Online (Sandbox Code Playgroud)

uiview swift

7
推荐指数
1
解决办法
4009
查看次数

数字的 Swift 算术和比较运算符重载列表?

文档中是否有某个地方或我可以在 Xcode 6 中动态查找的内容,显示所有已定义的数字运算符重载,例如二进制算术和比较运算符?

Swift 支持所有数字类型的四种标准算术运算符:
加法 (+)
减法 (-)
乘法 (*)
除法 (/)

Swift 支持所有标准的 C 比较运算符:
等于 (a == b)
不等于 (a != b)
大于 (a > b)
小于 (a < b)
大于或等于 (a >= b)
小于或等于 (a <= b)

我想知道的原因是,我可以看到什么时候必须使用类型转换,什么时候不需要,因为有两个兼容类型的内置运算符重载。

我有一个关于类型转换和自动升级的相关问题,但在我发布之前,我想确保我理解 Swift 默认定义的规则。

xcode operator-overloading swift

5
推荐指数
1
解决办法
3670
查看次数

Swift beta 5中的bridgeToObjectiveC和makeObjectsPerformSelector

我有一个完成处理程序的代码,在Xcode 6 beta 4中工作,不再适用于Xcode 6 beta 5.

dropsToRemove.bridgeToObjectiveC().makeObjectsPerformSelector("removeFromSuperview")
Run Code Online (Sandbox Code Playgroud)

全方法......

func animateRemovingDrops(dropsToRemove: [UIView]) {
    println(__FUNCTION__)
    UIView.animateWithDuration(1.0,
        animations: {
            for dropView in dropsToRemove {
                let x = CGFloat(UInt(arc4random_uniform(UInt32(UInt(self.gameView.bounds.size.width) * 5)))) - self.gameView.bounds.size.width * 2
                let y = self.gameView.bounds.size.height
                dropView.center = CGPointMake(x, -y)
        }}, completion: { finished in
                dropsToRemove.bridgeToObjectiveC().makeObjectsPerformSelector("removeFromSuperview")
        })
}
Run Code Online (Sandbox Code Playgroud)

错误是'[UIView]'没有名为'bridgeToObjectiveC'的成员

请注意,该方法中的CGFloat和Uint转换用于beta 4解决方法,我还没有更新该部分.这个问题包括在: 'CGFloat'不能转换为'UInt8'和其他CGFloat问题与Swift和Xcode 6 beta 4

我认为处理完成处理程序的解决方案可能是将数组视为NSArray,如下所述: 什么是makeObjectsPerformSelector的swift等价物?

(dropsToRemove as NSArray).makeObjectsPerformSelector("removeFromSuperview")
Run Code Online (Sandbox Code Playgroud)

但是,假设我的语法正确,只会导致另一个错误'makeObjectsPerformSelector'不可用:'performSelector'方法不可用

这是一个新的Swift错误,还是我在发行说明中缺少的东西?

objective-c swift

4
推荐指数
1
解决办法
2210
查看次数