为 struct 创建一个变量 (swift)



我有两个结构,看起来像这样:

struct Song {
var title: String
var artist: String
}
var songs: [Song] = [
Song(title: "Title 1", artist: "Artist 1"),
Song(title: "Title 2", artist: "Artist 2"),
}

struct Song2 {
var title: String
var artist: String
}
var songs2: [Song] = [
Song(title: "Title 1", artist: "Artist 1"),
Song(title: "Title 2", artist: "Artist 2"),
}

我想创建一个变量,该变量会发生变化,以便在不同的事件中引用第一个结构,或者引用第二个结构。喜欢这个。

var structToBeReferenced = //What goes here?

视图控制器1

override func viewDidLoad() {
super.viewDidLoad()
structToBeReferenced = songs
}

视图控制器2

override func viewDidLoad() {
super.viewDidLoad()
structToBeReferenced = songs2
}

视图控制器3

func theFunction() {
label.text = structToBeReferenced[thisSong].title
}

基本上,我只想创建一个可以更改的变量,以便在ViewController1中,它将structToBeReferenced设置为songsViewController2structToBeReferenced设置为songs2。因此,在ViewController3中,无论何时调用theFunction(),都会引用正确的库。

我希望这是有道理的。我只需要知道变量structToBeReferenced需要等于什么。感谢您的帮助!

创建一个两个结构都符合的协议。像这样:

protocol SongProtocol {
var title: String { get set }
}

那么你的结构将符合这样的协议:

struct Song: SongProtocol {
var title: String
var artist: String
}

现在,在视图控制器中,您可以使用协议类型声明 struct 属性:

var structToBeReferenced: SongProtocol = // your struct here

这样,两种结构类型都可以保证具有 title 属性,但只要它们符合SongProtocol,您就可以使用所需的任何一种。

最新更新