我有这门课
class InboxInterests {
var title = ""
var eventID = 0
var count = ""
var added = 0
init(title : String, eventID : NSInteger, count: String, added : NSInteger) {
self.title = title
self.eventID = eventID
self.count = count
self.added = added
}
}
Run Code Online (Sandbox Code Playgroud)
我就是这样用的
var array: [InboxInterests] = [InboxInterests]()
Run Code Online (Sandbox Code Playgroud)
新增项目
let post = InboxInterests(title: "test",eventID : 1, count: "test", added: 0)
self.array.append(post)
Run Code Online (Sandbox Code Playgroud)
我想eventID
按键找到索引并added
在同一索引中更改key的值
怎么可能?
Jen*_*ers 57
对我来说,上面的答案没有用.所以,我所做的是首先找到我要替换的对象的索引,然后使用索引将其替换为新值
if let row = self.upcoming.index(where: {$0.eventID == id}) {
array[row] = newValue
}
Run Code Online (Sandbox Code Playgroud)
Luk*_*uke 36
使用过滤器,首先找到值:
array.filter({$0.eventID == id}).first?.added = value
Run Code Online (Sandbox Code Playgroud)
你在这:
编辑:在Swift 3中,你可以节省几个字符
array.first({$0.eventID == id})?.added = value
Run Code Online (Sandbox Code Playgroud)
编辑:Swift 4.2:
array.first(where: { $0.eventID == id })?.added = value
array.filter {$0.eventID == id}.first?.added = value
Run Code Online (Sandbox Code Playgroud)
Pab*_*mez 15
在这种情况下,过滤器运算符不是最好的,它适用于某些人,因为类是通过引用传递的.
说明:(如果要验证,可以在操场中复制以下代码).
class Book {
let id: Int
var title = "default"
init (id: Int) {
self.id = id
}
}
var arrayBook = [Book]()
arrayBook.append(Book(id: 0))
arrayBook.append(Book(id:1))
arrayBook.forEach { book in
print(book.title)
}
arrayBook.filter{ $0.id == 1 }.first?.title = "modified"
arrayBook.forEach { book in
print(book.title)
}
Run Code Online (Sandbox Code Playgroud)
数组是通过值而不是引用复制的,因此当您使用过滤器时,您正在创建一个新数组(与初始数组不同),但是当您修改新数组时,初始数组也会被修改,因为它们都指向同一个类( (通过引用传递),因此在过滤器之后,您的数组将发生更改并且新的数组将被取消分配.因此,在这种情况下,它将打印" 默认","默认",然后"默认","修改".
如果更改class
为会发生什么struct
,该值将通过值而不是引用传递,因此您将在内存中有2个不同值的数组,因此如果arrayBooks
再次执行它将在筛选器"default","default"之前打印,然后"默认","默认"再次.因为当您使用过滤器时,您正在创建和修改一个新阵列,如果您不存储它将被解除分配).
解决方案是使用map,创建一个包含所有值的新数组,但是使用我们想要的修改的项目或字段,然后用新的数组替换我们的数组.这将在地图前打印"默认","默认",然后"默认","修改"
这将适用于结构,类和您想要的所有内容:).
struct Book {
let id: Int
var title = "default"
init (id: Int) {
self.id = id
}
}
var arrayBook = [Book]()
arrayBook.append(Book(id: 0))
arrayBook.append(Book(id:1))
arrayBook.forEach { book in
print(book.title)
}
arrayBook = arrayBook.map{
var mutableBook = $0
if $0.id == 1 {
mutableBook.title = "modified"
}
return mutableBook
}
arrayBook.forEach { book in
print(book.title)
}
Run Code Online (Sandbox Code Playgroud)
array = array.map { $0.eventID == id ? newValue : $0 }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35233 次 |
最近记录: |