self.init Swift 2.2 调用中的额外参数
Extra argument in call in self.init Swift 2.2
我一直在寻找这个错误并阅读各种 Whosebug、Apple 文档和博客答案,但我仍然遇到问题。我有一个符合 NSData 和 NSCoding 的 class,将存储 6 个属性中的 3 个。在所需的便利 init 中调用 self.init 时,即使 self.init 签名与 init 完全匹配(我复制并粘贴),我也会收到错误 "Extra argument 'groomedStatus' in call,"。这是相关代码:
class Trail: NSObject, NSCoding {
var name: String
var difficulty: Difficulty
var haveSkied: Bool
var season: Season = .winter
var open: String?
var groomedStatus: String?
init(name: String, difficulty: Difficulty, haveSkied: Bool, season: Season, open: String?, groomedStatus: String?) {
self.name = name
self.difficulty = difficulty
self.haveSkied = haveSkied
self.season = season
self.open = open
self.groomedStatus = groomedStatus
}
required convenience init(coder aDecoder: NSCoder) {
let haveSkied = aDecoder.decodeObjectForKey("haveSkied") as! Bool
let open = aDecoder.decodeObjectForKey("open") as? String
let groomedStatus = aDecoder.decodeObjectForKey("groomedStatus") as? String
self.init(name: String, difficulty: Difficulty, haveSkied: Bool, season: Season, open: String?, groomedStatus: String?) {
self.name = name
self.difficulty = difficulty
self.haveSkied = haveSkied
self.season = season
self.open = open
self.groomedStatus = groomedStatus
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeBool(haveSkied, forKey: "haveSkied")
aCoder.encodeObject(open, forKey: "open")
aCoder.encodeObject(groomedStatus, forKey: "groomedStatus")
}
}
问题是由您调用 self.init()
的方式引起的。您在代码中执行此操作的方式本质上是试图重新定义它,这对编译器来说毫无意义。这就是你应该如何在你的便利初始值设定项中调用 self.init()
。
self.init(name: "yourActualNameString", difficulty: Difficulty(), haveSkied: true, season: .winter, open: "yourActualOpenString", groomedStatus: "yourActualGroomedStatusString")
我一直在寻找这个错误并阅读各种 Whosebug、Apple 文档和博客答案,但我仍然遇到问题。我有一个符合 NSData 和 NSCoding 的 class,将存储 6 个属性中的 3 个。在所需的便利 init 中调用 self.init 时,即使 self.init 签名与 init 完全匹配(我复制并粘贴),我也会收到错误 "Extra argument 'groomedStatus' in call,"。这是相关代码:
class Trail: NSObject, NSCoding {
var name: String
var difficulty: Difficulty
var haveSkied: Bool
var season: Season = .winter
var open: String?
var groomedStatus: String?
init(name: String, difficulty: Difficulty, haveSkied: Bool, season: Season, open: String?, groomedStatus: String?) {
self.name = name
self.difficulty = difficulty
self.haveSkied = haveSkied
self.season = season
self.open = open
self.groomedStatus = groomedStatus
}
required convenience init(coder aDecoder: NSCoder) {
let haveSkied = aDecoder.decodeObjectForKey("haveSkied") as! Bool
let open = aDecoder.decodeObjectForKey("open") as? String
let groomedStatus = aDecoder.decodeObjectForKey("groomedStatus") as? String
self.init(name: String, difficulty: Difficulty, haveSkied: Bool, season: Season, open: String?, groomedStatus: String?) {
self.name = name
self.difficulty = difficulty
self.haveSkied = haveSkied
self.season = season
self.open = open
self.groomedStatus = groomedStatus
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeBool(haveSkied, forKey: "haveSkied")
aCoder.encodeObject(open, forKey: "open")
aCoder.encodeObject(groomedStatus, forKey: "groomedStatus")
}
}
问题是由您调用 self.init()
的方式引起的。您在代码中执行此操作的方式本质上是试图重新定义它,这对编译器来说毫无意义。这就是你应该如何在你的便利初始值设定项中调用 self.init()
。
self.init(name: "yourActualNameString", difficulty: Difficulty(), haveSkied: true, season: .winter, open: "yourActualOpenString", groomedStatus: "yourActualGroomedStatusString")