2017-07-17 84 views
0

我有兩個結構看起來像這樣:創建一種結構(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? 

ViewController1

override func viewDidLoad() { 
     super.viewDidLoad() 

structToBeReferenced = songs 
} 

ViewController2

override func viewDidLoad() { 
      super.viewDidLoad() 

    structToBeReferenced = songs2 
    } 

ViewController3

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

基本上,我只是想創建一個可以更改的變量,以便在ViewController1中,它將structToBeReferenced設置爲songsViewController2 sets structToBeReferenced to songs2。因此,在調用theFunction()時,在ViewController3中引用了正確的庫。

我希望這是有道理的。我只需要知道變量structToBeReferenced需要等於什麼。謝謝您的幫助!

+2

不太確定你想達到什麼目的。聲明兩個完全不相關的目標雖然在實現上完全相同,但是結構是什麼? –

+0

@mag_zbc我有2個歌曲庫。兩者都顯示在「UITableView」上。當用戶點擊單元格時,會打開玩家視圖。兩個桌面視圖都打開了相同的玩家視圖。我需要這樣才能在播放器視圖中引用正確的歌曲庫。 –

+0

@JacobCavin,那麼你需要兩個集合,而不是兩個不同但類似的類型。 – user28434

回答

1

創建一個protocol這兩個結構符合。事情是這樣的:

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

那麼你的結構將符合這樣的協議:

var structToBeReferenced: SongProtocol = // your struct here 

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

現在,在您的視圖控制器,你可以使用的協議類型聲明的結構特性

這樣,兩種結構類型都保證具有title屬性,但只要符合SongProtocol,就可以使用所需的任何一種結構。