是否可以在 SwiftUI/Swift 中改变类函数内部的数组?



如果我在一个类中声明了一个数组,是否可以从类的一个函数中改变该数组?我希望有一些等效的"mutating"关键字可用于类:

class className: ObservableObject {
@Published var arrayName: [arrayType] = []
func mutateArray(address: String) {
self.arrayName = []
let geocoder = Geocoder(accessToken: 'accessTokenHere')
geocoder.geocode(ForwardGeocodeOptions(query: address) { (placemarks, attribution, error) in 
guard let placemarks = placemarks
else {
return
}
self.arrayName = [value1, value2, value3]
//This only updates the array inside this closure/context. Is there any way to have the update persist after the function has ended?
}
}

类不需要mutating的等效项,因为它是引用类型,不像结构是值类型,这就是为什么它需要mutating函数。在你的Xcode-playground上试试这段代码:

import Foundation
class className {
var arrayName: [String] = []
func mutateArray() {
arrayName = ["value1", "value2", "value3"]
}
}
let object = className()
print(object.arrayName)
object.mutateArray()
print(object.arrayName)

已发布的属性应在主队列上更新,因此请执行以下操作

class ClassName: ObservableObject {
@Published var arrayName: [arrayType] = []
func mutateArray(address: String) {
self.arrayName = []
let geocoder = Geocoder(accessToken: 'accessTokenHere')
geocoder.geocode(ForwardGeocodeOptions(query: address) { [weak self] (placemarks, attribution, error) in
guard let placemarks = placemarks
else {
return
}
DispatchQueue.main.async {     // << here !!
self?.arrayName = [value1, value2, value3] // << weak for safety
}
}
}
}

最新更新