如何在 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
}
你应该让它们自动生成
这听起来很简单,但我如何在 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
}
你应该让它们自动生成