实例化一个struct会产生“无法构造,因为它没有可访问的初始值设定项”

时间:2016-08-08 22:41:32

标签: swift struct

问题

我有以下表示RGBA像素的结构。我想实例化它来创建我自己的Pixel对象,但我没有这样做。编译器抛出此错误'Pixel' cannot be constructed because it has no accessible initializers

我尝试了什么

例如,所有这些都返回相同的错误:

var myPixel = Pixel()
var myPixel = Pixel(value: UInt32(1))
var myPixel = Pixel(value: UInt32(1), red: UInt8(1), green: UInt8(1), blue: UInt8(1))

有问题的结构

public struct Pixel {
    public var value: UInt32

    public var red: UInt8 {
        get {
            return UInt8(value & 0xFF)
        }
        set {
            value = UInt32(newValue) | (value & 0xFFFFFF00)
        }
    }

    public var green: UInt8 {
        get {
            return UInt8((value >> 8) & 0xFF)
        }
        set {
            value = (UInt32(newValue) << 8) | (value & 0xFFFF00FF)
        }
    }

    public var blue: UInt8 {
        get {
            return UInt8((value >> 16) & 0xFF)
        }
        set {
            value = (UInt32(newValue) << 16) | (value & 0xFF00FFFF)
        }
    }

    public var alpha: UInt8 {
        get {
            return UInt8((value >> 24) & 0xFF)
        }
        set {
            value = (UInt32(newValue) << 24) | (value & 0x00FFFFFF)
        }
    }
}

其他人如何在同一代码库中使用它

我无法更改结构,因为它正在其他地方使用,它肯定有效。我已经挖掘了他们在像素阵列中使用它的代码,但不能使它的头部或尾部(第一次使用Swift)。以下是我认为的相关内容:

public struct RGBAImage {
    public var pixels: [Pixel]
    // ...    
    public init?(image: UIImage) {
        // ...
        let imageData = UnsafeMutablePointer<Pixel>.alloc(width * height)
        // ...
        let bufferPointer = UnsafeMutableBufferPointer<Pixel>(start: imageData, count: width * height)
        pixels = Array(bufferPointer)
        // ...
    }
}

编辑:

我正在使用Swift Playground,Pixel结构和RGBAImage结构位于Sources文件夹中的单独文件中。无效的代码位于主操场页面中。如果我将Pixel结构复制/粘贴到主页面,一切都按预期工作。

0 个答案:

没有答案