如何在 Swift 中合并不同对象的数组

How to merge arrays of different objects in Swift

这听起来很简单,但我如何在 Swift 中合并两个不同类型的数组(Simpson 和 Movie),然后继续按对象数组的唯一共同点 属性 按字母顺序排序- 在这种情况下 'name'?

struct Simpson {
    var age: Int
    var name: String
    init(age: Int, name: String) {
        self.age = age
        self.name = name
    }
}
let homer = Simpson(age: 39, name: "Homer")
let marge = Simpson(age: 36, name: "Marge")
var simpson = [homer, marge] // [{age 39, name "Homer"}, {age 36, name "Marge"}]

struct Movie {
    var location: String
    var name: String
    init(location: String, name: String) {
        self.location = location
        self.name = name
    }
}
let jaws = Movie(location: "Amity", name: "Jaws")
let et = Movie(location: "LA", name: "E.T")
var movies: [Movie] = [jaws, et] // [{location "Amity", name "Jaws"}, {location "LA", name "E.T"}]

你需要

protocol SharedName {
    var name : String {get set}
}

struct Simpson: SharedName {
    var name : String = ""
    // add other vars 
}

struct Movie: SharedName {
    var name : String = ""
    // add other vars 
}

然后创建一个数组

var arr:[SharedName] = [] // fill in with different objects from Simpson and Movie
arr.sort { [=11=].name < .name }

提示:

struct去掉init

init(age: Int, name: String) {
    self.age = age
    self.name = name
}

&

init(location: String, name: String) {
    self.location = location
    self.name = name
}

你应该让它们自动生成