如果我在一个类中声明了一个数组,是否可以从类的一个函数中改变该数组?我希望有一些等效的"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
}
}
}
}