我有两个结构,看起来像这样:
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
设置为songs
。ViewController2将structToBeReferenced
设置为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
,您就可以使用所需的任何一种。