我正在从一个教程中学习,我必须转换为最新版本的Swift。它大部分时间都很好,除了我发出警告:“从未使用变量'错误'的初始化;考虑将其赋值替换为'_'或删除。这是代码:
class func loadMembersFromFile(path:String) -> [Member]
{
var members:[Member] = []
var error:NSError? = nil
if let data = try? NSData(contentsOfFile: path, options:[]) ,
json = (try? NSJSONSerialization.JSONObjectWithData(data, options: [])) as? NSDictionary,
team = json["team"] as? [NSDictionary] {
for memberDictionary in team {
let member = Member(dictionary: memberDictionary)
members.append(member)
}
}
return members
}
我理解错误,所以我遵循Xcode的建议并将违规行更改为:
_:NSError? = nil
导致两个新错误; '一行上的连续陈述必须用';'分隔和'预期的表达'
很明显这些都是语法错误,所以我希望这不是一个愚蠢的问题,而是连续的陈述?另外,为什么这些错误只会在我改变Xcode建议之后出现?
答案 0 :(得分:2)
我自己尝试过,似乎Xcode的“建议”也删除了let
关键字,而不是将其保留为新的变量名称_
。
由于不再有任何变量赋值,因此会出现语法错误。 Xcode看到的两个连续语句是_
和:NSError = nil
。所以,它认为你犯了一个错误而忘记在同一行(Consecutive statements on the same line must be replace by a ';'
)的两个语句之间加一个分号。它建议你在那里加一个分号,当你这样做时,它意识到_
和:NSError = nil
都不是有效的表达式,而是用Expected Expression
告诉你。
但这一切都不重要,因为错误处理已从NSErrors迁移到try/catch
并且不再使用NSError。你可以删除它。 PS,您应该在try
块中放置do
个语句的任何代码,然后处理catch
块中的任何错误
答案 1 :(得分:-1)
只需删除整行。我认为您在进行更改后遇到的错误是因为您还删除了var
关键字?无论哪种方式,只需删除该行,您就会处于良好状态。