gpt4 book ai didi

swift - 尝试存储 CGColor 类型元素时,数组作为实例变量崩溃(Xcode 6 beta 4)

转载 作者:行者123 更新时间:2023-11-30 10:22:57 25 4
gpt4 key购买 nike

buildPalette() 的最后一行因 EXC_BAD_INSTRUCTION 崩溃(代码 = EXC_I386_IVOP,子代码 = 0x0)。当我使用不同的类型(例如 Int)而不是 CGColor 时,这是可以的。

奇怪的是,我可以为数组使用局部变量并用颜色填充它,但是当我尝试从 buildPalette() 返回它时,它会崩溃并显示相同的消息。

@objc class Palette {
var palette: [CGColor]

init() {
palette = [CGColor]()
buildPalette()
}

func buildPalette() {

let rgb = CGColorSpaceCreateDeviceRGB()

// omitting the loop for simplicity
let color = CGColorCreate(rgb, [1.0, 1.0, 1.0, 1.0])
palette.append(color) // crashes here
}
}

最佳答案

编辑:Maciej Trybiło 1已评论此问题已在 Xcode Beta 5 中修复

您正在使用CGColor在数组中,因此无法在 swift objective c 中正确转换(桥接到 AnyObject )数组。当您使用 CGColor 时在数组中,它不能在 swift 中直接转换为 AnyObject在数组中,以便在使用 objective-c 类时导致运行时错误。您需要定义 var palette[AnyObject]CoreGraphics 之间进行正确转换至swift或者您可以使用UIColor .

来自 Swift docs

When you bridge from a Swift array to an NSArray object, the elements in the Swift array must be AnyObject compatible. For example, a Swift array of type Int[] contains Int structure elements. The Int type is not an instance of a class, but because the Int type bridges to the NSNumber class, the Int type is AnyObject compatible. Therefore, you can bridge a Swift array of type Int[] to an NSArray object. If an element in a Swift array is not AnyObject compatible, a runtime error occurs when you bridge to an NSArray object.

You can also create an NSArray object directly from a Swift array literal, following the same bridging rules outlined above. When you explicitly type a constant or variable as an NSArray object and assign it an array literal, Swift creates an NSArray object instead of a Swift array.

所以你需要制作CGColorAnyObject 兼容.所以下面的代码可以正常工作。

@objc class Palette {
var palette: [AnyObject]

init() {
palette = [AnyObject]()
buildPalette()
}

func buildPalette() {

let rgb = CGColorSpaceCreateDeviceRGB()

// omitting the loop for simplicity
let color:CGColorRef = CGColorCreate(rgb, [1.0, 1.0, 1.0, 1.0])
palette.append(color) // crashes here
}
}

上述方法适用于 CGColor但您可以使用UIColor而不是CGColor并可以转换您的CGColor通过UIColor(CGColor: CGColor?) .

关于swift - 尝试存储 CGColor 类型元素时,数组作为实例变量崩溃(Xcode 6 beta 4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25105967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com