如何解决这个错误:不能用类型为`...`的参数列表调用`......`类型的初始值设定项?
问题描述:
我需要解决的错误帮助:如何解决这个错误:不能用类型为`...`的参数列表调用`......`类型的初始值设定项?
Cannot invoke initializer for type 'QuotesViewController.RandomItems' with an argument list of type '(items: [String], seen: Int)'
这是我的代码:
struct RandomItems: Codable
{
var items : [String]
var seen = 0
init(_ items:[String])
{ self.items = items }
mutating func next() -> String
{
let index = Int(arc4random_uniform(UInt32(items.count - seen)))
let item = items.remove(at:index)
items.append(item)
seen = (seen + 1) % items.count
return item
}
func toPropertyList() -> [String: Any] {
return [
"items": items,
"seen": seen
]
}
}
}
extension QuotesViewController.RandomItems {
init?(propertyList: [String: Any]) {
return nil
}
}
let a = QuotesViewController.RandomItems(items: ["hello"], seen: 2) //<-- Error
let data: Data = try! JSONEncoder().encode(a)
let b = try! JSONDecoder().decode(QuotesViewController.RandomItems.self, from: data)
答
此行
let a = QuotesViewController.RandomItems(items: ["hello"], seen: 2) //<-- Error
调用一个不存在的初始化器。创建一个这样的:
init(items:[String], seen: Int)
{
self.items = items
self.seen = seen
}
良好的措施,现有的初始化器更改为
init(_ items: [String])
{
self.init(items: items, seen: 0)
}
,这样,如果你需要额外的东西添加到initialisers,你只需要做的是在一个地点。
或者只是有一个初始化器
init(items:[String], seen: Int = 0)
{
self.items = items
self.seen = seen
}
嘛'QuotesViewController.RandomItems'没有一个'的init(项目:看到:)' – Hamish