【发布时间】:2019-08-07 05:04:34
【问题描述】:
我创建了一个名为 Weather 的自定义类并声明了一个 Weather 对象数组。
import Foundation
class Weather {
var cityName:String
var temperature:Double
var temperatureMax:Double
var temperatureMin:Double
init(cityName: String, temperature: Double, temperatureMax: Double, temperatureMin: Double) {
self.cityName = cityName
self.temperature = temperature
self.temperatureMax = temperatureMax
self.temperatureMin = temperatureMin
}
}
import UIKit
import SwiftyJSON
class ViewController: UIViewController {
@IBOutlet weak var myLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
var weatherArrays = [Weather]()
findLocation(zipCode: "11210", weatherArrays: weatherArrays)
print(weatherArrays[0].cityName)
}
func findLocation(zipCode: String, weatherArrays: [Weather])
{
let zip = zipCode
let appID = "245360e32e91a426865d3ab8daab5bf3"
let urlString = "http://api.openweathermap.org/data/2.5/weather?zip=\(zip)&appid=\(appID)&units=imperial"
let request = URLRequest(url: URL(string: urlString)!)
URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
do
{
let json = try JSONSerialization.jsonObject(with: data!) as! NSDictionary
let main = json["main"] as! [String:Any]
let temp = main["temp"]! as! Double
let name = json["name"]! as! String
let tempMax = main["temp_max"]! as! Double
let tempMin = main["temp_min"]! as! Double
weatherArrays.append(Weather(cityName: name, temperature: temp, temperatureMax: tempMax, temperatureMin: tempMin))
}
catch
{
print("Error")
}
}.resume()
}
}
我将数组传递给一个函数,并将值附加到 weatherArrays 参数。但是,当我编译时出现错误,“不能在不可变值上使用变异成员:'weatherArrays' 是一个 'let' 常量。”
Weather 类最初是一个结构,但我遇到了同样的错误,我阅读并发现结构值无法在函数中编辑,因为它是按值传递的。 我将结构更改为一个类,但我仍然遇到同样的错误?当我将weatherArrays 声明为var 时,为什么它说“'weatherArrays' 是'let' 常量”?
【问题讨论】:
-
不要尝试修改传入的数组。使用完成处理程序返回一个新数组。有关使用完成处理程序的详细信息,请参阅stackoverflow.com/questions/25203556/…。
-
如果你在全局范围内定义了任何东西(比如weatherArrays),你不需要将它作为参数传递
标签: swift class struct constants