首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Swift 3中向结构数组中添加新的var?

如何在Swift 3中向结构数组中添加新的var?
EN

Stack Overflow用户
提问于 2016-12-15 00:29:19
回答 4查看 348关注 0票数 0

给予:

代码语言:javascript
运行
复制
var malls: [Mall] = [ 
    Mall(name:"yagey", distance:""), 
    Mall[name:tigey", distance:"") 
]

如何将distance设置为不同的字符串?

代码语言:javascript
运行
复制
for mall in malls {
    distance = distanceInMeters
}

不起作用。

谢谢!

代码语言:javascript
运行
复制
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
}

错误:

代码语言:javascript
运行
复制
Cannot assign to property: 'mall' is a 'let' constant

F

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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
     }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-12-15 01:09:50

由于Mall是一个结构,然后是一个值类型,所以需要将更新后的值放回数组中

代码语言:javascript
运行
复制
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
}
票数 0
EN

Stack Overflow用户

发布于 2016-12-15 01:04:07

因为struct是值类型而不是引用类型,所以修改副本不会反映对副本的更改。默认情况下,for循环给出不可变的let常量。所以你不能修改它。

你应该这么做:

代码语言:javascript
运行
复制
malls = malls.map { mall in
    var newMall = mall
    newMall.distance = distanceInMeters
    return newMall
}

你所犯的错误是

不能分配财产:'mall‘是'let’常量

这意味着mall是一个不可修改的常量变量。因此,您需要复制它并修改mall,而不是修改它。

代码语言:javascript
运行
复制
var newMall = mall;
newMall.distance = distanceInMeters

但是,您还希望放弃原始副本并使用新副本。简单的方法是使用Array.map创建一个具有新副本的新数组。

票数 1
EN

Stack Overflow用户

发布于 2016-12-15 00:31:46

假设您已经定义了Mall,如下所示:

代码语言:javascript
运行
复制
struct Mall {
    var distance: String
    var name: String

    init...
    ...
    ...
}

您必须访问struct的属性。

代码语言:javascript
运行
复制
for mall in malls {
    mall.distance = distanceInMeters
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41154524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档