Swift:通过引用或“影响结构”;别名";对一个变量
我必须更新结构,但此结构需要从我的viewController中找到一个长表达式:Swift:通过引用或“影响结构”;别名";对一个变量,swift,struct,reference,Swift,Struct,Reference,我必须更新结构,但此结构需要从我的viewController中找到一个长表达式: let theMessage:Message? = self.messageSections.first(where: { $0.date == DateDMY(fromNSDate:msg.date) })? .msgs.first(where: { $0 == msg }) 我想改变这个结构的一个属性,但不是它的副本,我想更新它“在哪里”,即在messageSections[].msgs[]
let theMessage:Message? = self.messageSections.first(where: { $0.date == DateDMY(fromNSDate:msg.date) })?
.msgs.first(where: { $0 == msg })
我想改变这个结构的一个属性,但不是它的副本,我想更新它“在哪里”,即在messageSections[].msgs[]
这里的问题是,如果我在上面的代码之后尝试此代码:
theMessage.status = .NOT_SENT
只有本地副本将被更新,而不是messageSections[].msgs[]中的真实副本。因此,当我重新加载collectionView时,一切都没有改变
我可以
self.messageSections.first(where: { $0.date == DateDMY(fromNSDate:msg.date) })?
.msgs.first(where: { $0 == msg }).status = .NOT_SENT
但是如果我必须在函数中多次操作这个属性,我不想每次都重写整个表达式。所以我要找的是类似于C的东西:
let theMessage:Message?* = &self.messageSections.first(where: { $0.date == DateDMY(fromNSDate:msg.date) })?
.msgs.first(where: { $0 == msg })
if(theMessage != NULL)
theMessage->status = .NOT_SENT
我在其他问题中看到了我可以使用的&参数前和参数名前的inout,但它仅用于函数调用。我正在寻找一种在影响变量时为大表达式创建别名的方法,以避免每次重新写入它。您可以使用
firstIndex
获取数组中元素的索引,然后使用检索到的索引直接访问元素
if let messageSectionIndex = self.messageSections.first(where: { $0.date == DateDMY(fromNSDate:msg.date) }), let messageIndex = self.messageSections[messageSectionIndex].msgs.firstIndex(where: { $0 == msg }) {
self.messageSections[messageSectionIndex].msgs[messageIndex].status = .NOT_SENT
}
必须得到指数而不是元素
firstIndex
@Kevin lol好方法我甚至没想过谢谢我会这么做:)