为什么我不能在Swift中使用“Struct”作为类型

时间:2017-08-03 18:53:43

标签: swift struct

我正在创建struct并希望在其中嵌套struct

这就是它的样子:

public struct TGObject: Codable {
    var metadata: Struct
    var image: TGImage

    public init(image: TGImage, metadata: Struct) {
        self.image = image
        self.metadata = metadata
    }
}

问题是Xcode不允许我使用Struct作为类型。这是为什么?为什么我可以使用StringInt作为类型,但Struct不可接受。我希望Struct作为类型的原因是用户应该能够创建自己的struct并将其放在init中。

阿卡:

struct metadataStruct {
    var name: String

    init(name: String) {
        self.name = name
}
let metadataInstance = metadataStruct(name: "John")
let imageInstance = TGObject(image: "image.com")
var structInstance = TGObject(image: imageInstance, metadata: metadataInstance)

有没有办法解决这个问题?

干杯, 西奥

2 个答案:

答案 0 :(得分:2)

而不是无效的类型名称Struct,使其成为泛型类型,如下所示:

public struct TGObject<MetadataType>: Codable {
    var metadata: MetadataType
    var image: TGImage

    public init(image: TGImage, metadata: MetadataType) {
        self.image = image
        self.metadata = metadata
    }
}

现在您可以将它用于任何类型,例如

let image = UIImage(...)
let metadata = "This is going to be a string."
let object = TGObject(image: image, metadata: metadata)

答案 1 :(得分:-3)

你想做的事是不可能的。正如DávidPásztor所说,没有像Struct这样的类型。 我建议你使用Dictionary作为元数据的类型。因此,用户可以将键和值放入元数据并将其传递给构造函数。

public struct TGObject: Codable {
    var metadata: [String:Any]
    var image: TGImage

    public init(image: TGImage, metadata: [String:Any]) {
        self.image = image
        self.metadata = metadata

        let someInfo = metadata["Key"]
    }
}