作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为我的结构设置一个自定义枚举,以便在我将它们全部放入同一个数组后能够识别它们自己。我使我的结构符合相同的协议(protocol),这样我就不必使用 Any/AnyObject 但现在我在正确的方法上遇到了麻烦,无法在结构中设置枚举并创建一个函数来将对象恢复为原来的状态之后的状态。
我目前将所有结构都放在一个数组中,方法是让它们都符合相同的协议(protocol)
struct Artist: Decodable, ContentWrapper {
let name: String
let image: [[String:String]]
init(name: String, image: [[String:String]]) {
self.name = name
self.image = image
}
}
struct Album: Decodable, ContentWrapper {
let name: String
let artist: String
let image: [[String:String]]
init(name: String, artist: String, image: [[String:String]]) {
self.name = name
self.artist = artist
self.image = image
}
}
enum myType {
case type(String)
}
protocol ContentWrapper {
}
我需要为每个结构设置一个枚举,以便能够识别它们自己,然后能够有一个函数在从数组接收它们后将它们返回到它们的原始对象。
最佳答案
您想在此处使用的工具是一个用于保存数据的枚举,而不是一个用于保存类型的枚举。完全摆脱 ContentWrapper
并将其替换为:
enum Element {
case artist(Artist)
case album(Album)
}
var elements: [Element] = []
现在 elements
是一组“艺术家或专辑”,我相信这就是您正在寻找的。你在 Swift 中说“类型或其他类型”的方式是使用枚举。
要处理不同的元素类型,通常你会使用switch
:
for element in elements {
switch element {
case .artist(let artist):
// Perform "artist-like" functions on `artist`
break
case .album(let album):
// Perform "album-like" functions on `album`
break
}
}
关于ios - 如何在结构中设置枚举以用作标识符来初始化自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54700358/
我是一名优秀的程序员,十分优秀!