swift - 如何在 Swift 中创建一个不可变的结构实例数组作为实例变量?

标签 swift

当我尝试创建以下 songs 数组时,出现错误:

"Cannot use instance member 'song' within property initializer; property initializers run before 'self' is available"

class ViewController: UIViewController {
    struct Song {
        let title: String
    }
    let song = Song(title: "A")
    let songs = [song]
}

我可以将 let songs = [song] 移动到 viewDidLoad() 中,但是我无法从其他函数访问 songs 。我可以将 let 更改为 var,然后将 viewDidLoad() 中的 songs 更改为我的歌曲数组,但随后当我希望它不可变时,我创建了一个可变数组。

我如何获得可用于所有函数的不可变歌曲数组,同时仍然让每首歌曲都以其自身的常量可用?

最佳答案

您可以通过在初始化期间创建歌曲数组来实现此目的。

class ViewController: UIViewController {
    struct Song {
        let title: String
    }
    let song = Song(title: "A")
    let songs : [Song]

    required init?(coder aDecoder: NSCoder) {
        self.songs = [self.song]
        super.init(coder: aDecoder);
    }
}

关于swift - 如何在 Swift 中创建一个不可变的结构实例数组作为实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900615/

相关文章:

ios - 未隐式定义关联类型的通用协议(protocol)

ios - ARImageAnchor 变换矩阵的坐标与 ARPlaneAnchor 的坐标相差太大

swift - 使用NSVisualEffectView时如何添加按钮

ios - Xcode 11.5 未在运行 iOS13.5 的 iPhone 上安装应用程序

Swift Document Picker,无法访问文件

Swift - 实现平等?

swift - 以编程方式创建自定义 UICollectionFlowLayout

ios - 如何在 SpriteKit 中检测不同类型的碰撞

ios - uiwebview vs wkwebview,一个可以加载内容,一个不能

ios - 使用 AVPlayer 黑屏(在模拟器和设备中)