我正在学习 Swift 中的泛型。对我来说,这个话题很难理解。在我正在读的书中,关于泛型有两个挑战:
第一个挑战:它要求编写一个函数findAll(_:_:),该函数接受符合 Equatable 协议的任何类型 T 的数组和单个元素(也是 T 类型)。findAll(_:_:)应该返回一个整数数组,对应于数组中找到该元素的每个位置。例如,findAll([5,3,7,3,9], 3]应该返回[1,3].
第二个挑战:修改findAll(_:_:)为接受 Collection 而不是数组,并给出提示“您需要将返回类型从 [Int] 更改为 Collection 协议关联类型的数组”
这就是我为第一个挑战所做的
func findAll<T:Equatable> (_ first: [T], _ second: T) -> [Int] {
var array = [Int]()
for i in 0..<first.count {
if first[i] == second {
array.append(i)
}
}
return array
}
Run Code Online (Sandbox Code Playgroud)
对于第二个挑战,我正在考虑的是一个可以传递集合(可以是数组、字典或集合)的通用函数。但是对于Set类型,由于它没有定义的顺序,如何找到Set中项目的位置?
谢谢。
我在Youtube的一些视频中看过这个.
class Student {
private var _name: String!
private var _studentID: Int!
var name: String {
return _name
}
var studentID:Int {
return _studentID
}
init(name: String, studentID: Int) {
self._name = name
self._studentID = studentID
}
}
Run Code Online (Sandbox Code Playgroud)
他们为什么这样做(添加_name和_studentID)而不是:
class Student {
private var name: String!
private var studentID: Int!
init(name: String, studentID: Int) {
self.name = name
self.studentID = studentID
}
}
Run Code Online (Sandbox Code Playgroud)
非常感谢你.