我正在努力提取天气数据,但我得到了一个超出范围的错误。有人可以帮忙吗?我的朋友告诉我它的数组有问题,但我肯定会使用字符串分隔符。
我的主要目标是从网站上检索天气数据,然后将其添加到名为message
的变量中override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://weather.weatherbug.com/weather-forecast/now/salt-lake-city")!
let request = NSMutableURLRequest(url: url)
let task = URLSession.shared.dataTask(with: request as URLRequest){
data, response, error in
var message = ""
if error != nil{
print(error.debugDescription)
}else{
if let unwrappedData = data {
let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue)
var stringSeperator = "<span class=\"value ng-binding ng-scope\" ng-if=\"widget.ObservationAggregate.Observation.FeelsLike\" ng-bind=\"UnitUtility.convertTemp(widget.ObservationAggregate.Observation.FeelsLike)\">"
if let contentArray = dataString?.components(separatedBy: stringSeperator){
if contentArray.count > 0 {
stringSeperator = "</span>"
let newContentArray = contentArray[1].components(separatedBy: stringSeperator)
if newContentArray.count > 0 {
message = newContentArray[0]
print(newContentArray[0])
}
}
}
}
}
}
task.resume()
}
答案 0 :(得分:0)
我假设你在下一行收到此错误。
let newContentArray = contentArray[1].components(separatedBy: stringSeperator)
问题似乎是您检查contentArray
的计数大于0但访问索引1.请注意,数组的计数不是0并不是必需的它将在索引1处具有值。由于数组的索引以0开头,因此索引1实际上要求您的数组计数至少为2.
答案 1 :(得分:0)
当我们想要从服务器获取一些信息时,建议获取/解析JSON
或XML
。我发现你正试图从网站上解析HTML
。
在澄清之后,如果您没有替代方案,我认为您正在接触那些error: Index out of range
,因为您假设您的数据将始终采用您认为的格式(通常您需要处理特殊情况) )
您可以将内部验证更新为:
if contentArray.count > 1 {
stringSeperator = "</span>"
let newContentArray = contentArray[1].components(separatedBy: stringSeperator)
if newContentArray.count > 0 {
message = newContentArray.first
print(newContentArray.first)
}
}
如果以更好的方式对这些进行分组,但这只是为了指导您。
我希望这会对你有所帮助。