给予:
var malls: [Mall] = [
Mall(name:"yagey", distance:""),
Mall[name:tigey", distance:"")
]如何将distance设置为不同的字符串?
for mall in malls {
distance = distanceInMeters
}不起作用。
谢谢!
import Foundation
struct Mall {
let name: String
let type: String
let image: String
let time: String
let timeWeek: String
let city: String
let location: String
let adress: String
let cinemaName: String
let productName: String
let numShop: String
let website: String
let schemeWeb: String
let longitude: Double
let latitude: Double
var distance: String
}错误:
Cannot assign to property: 'mall' is a 'let' constantF
func mallToDisplayAt(indexPath: IndexPath) -> Mall {
var mall: Mall
if searchController.isActive && searchController.searchBar.text != "" {
mall = filteredResultArray[indexPath.row]
} else {
mall = malls[indexPath.row]
}
return mall
}tableView
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! EateriesTableViewCell
let mall = mallToDisplayAt(indexPath: indexPath)
let mallLocate = CLLocation(latitude: mall.latitude, longitude: mall.longitude)
print (mallLocate)
let distanceInMeters = mallLocate.distance(from: coords) / 1000
let distanceInMetersString = String(format: "%.1f", distanceInMeters)
cell.distanceLabel.text = distanceInMetersString + "км"
for mall in malls {
distance = distanceInMeters
} return cell
}发布于 2016-12-15 01:09:50
由于Mall是一个结构,然后是一个值类型,所以需要将更新后的值放回数组中
for index in 0..<malls.count {
var mall = malls[index] // copy a mall value
mall.distance = "new value goes here" // change the copy of mall
malls[index] = mall // put the updated mall back into the array
}发布于 2016-12-15 01:04:07
因为struct是值类型而不是引用类型,所以修改副本不会反映对副本的更改。默认情况下,for循环给出不可变的let常量。所以你不能修改它。
你应该这么做:
malls = malls.map { mall in
var newMall = mall
newMall.distance = distanceInMeters
return newMall
}你所犯的错误是
不能分配财产:'mall‘是'let’常量
这意味着mall是一个不可修改的常量变量。因此,您需要复制它并修改mall,而不是修改它。
var newMall = mall;
newMall.distance = distanceInMeters但是,您还希望放弃原始副本并使用新副本。简单的方法是使用Array.map创建一个具有新副本的新数组。
发布于 2016-12-15 00:31:46
假设您已经定义了Mall,如下所示:
struct Mall {
var distance: String
var name: String
init...
...
...
}您必须访问struct的属性。
for mall in malls {
mall.distance = distanceInMeters
}https://stackoverflow.com/questions/41154524
复制相似问题