【问题标题】:Create A Variable for Struct (Swift)为结构创建一个变量(Swift)
【发布时间】:2017-07-17 12:19:50
【问题描述】:

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

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 设置为songsViewController2structToBeReferenced 设置为songs2。因此,在 ViewController3 中,每当调用 theFunction() 时,都会引用正确的库。

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

【问题讨论】:

  • 不太确定你想达到什么目的。声明两个完全不相关但实现相同的结构的目的是什么?
  • @mag_zbc 我有 2 个歌曲库。两者都显示在UITableView 上。当用户点击单元格时,它会打开一个播放器视图。两个 tableviews 打开相同的播放器视图。我需要这个,以便在播放器视图中引用正确的歌曲库。
  • @JacobCavin,那么你需要两个集合,不是两个不同的,而是相似的类型。

标签: ios swift variables struct


【解决方案1】:

创建两个结构都符合的protocol。像这样的:

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

那么你的结构就会像这样符合协议:

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

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

var structToBeReferenced: SongProtocol = // your struct here

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2011-09-08
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多