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

时间:2017-01-27 18:24:56

标签: swift

当我尝试创建下面的create table table_a ( user_id number, trx_no number ); create table table_b ( user_id number, trx_no number ); create table table_c ( user_id number, trx_no number ); insert into table_a (trx_no, user_id) values (1, null); insert into table_b (trx_no, user_id) values (1, null); insert into table_c (trx_no, user_id) values (1, null); 数组时,我收到错误:

  

“无法在属性初始值设定项中使用实例成员'歌曲';属性初始化程序在'self'可用之前运行”

songs

我可以将class ViewController: UIViewController { struct Song { let title: String } let song = Song(title: "A") let songs = [song] } 移到let songs = [song],但我无法从其他功能访问viewDidLoad()。我可以将songs更改为let,然后将var中的songs更改为我的歌曲数组,但是当我希望它变为不可变时我创建了一个可变数组

如何为所有功能提供不可变的歌曲数组,并且每首歌曲仍然可以使用自己的常量?

3 个答案:

答案 0 :(得分:1)

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

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);
    }
}

答案 1 :(得分:1)

鉴于song是常量,一个简单的解决方案就是将其设为static属性:

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

如果您需要在任何实例方法中访问它,您只需说ViewController.song

答案 2 :(得分:0)

要制作歌曲类型数组并添加歌曲,您应该:

var songs = [Song]()

在视图上加载:

songs.append(song)

所以它会是:

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

   override func viewDidLoad() {
        super.viewDidLoad()
        songs.append(song)

    }
}

另一种保持不可改变的选择:

let unmutableSongs: [Song] = [Song(title: "A")]