如何解决错误:无法调用类型为 `......` 的参数列表类型为 `...` 的初始化程序?
Posted
技术标签:
【中文标题】如何解决错误:无法调用类型为 `......` 的参数列表类型为 `...` 的初始化程序?【英文标题】:How to solve the error: Cannot invoke initializer for type `......` with an argument list of type`...`? 【发布时间】:2017-10-20 12:20:08 【问题描述】:我需要帮助解决错误:
无法使用类型为“(items: [String], seen: Int)”的参数列表调用类型“QuotesViewController.RandomItems”的初始化程序
这是我的代码:
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)
【问题讨论】:
好吧QuotesViewController.RandomItems
没有init(items:seen:)
【参考方案1】:
这一行
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)
因此,如果您需要向初始化程序添加额外的东西,您只需要在一个地方完成。
或者只有一个初始化器
init(items:[String], seen: Int = 0)
self.items = items
self.seen = seen
【讨论】:
以上是关于如何解决错误:无法调用类型为 `......` 的参数列表类型为 `...` 的初始化程序?的主要内容,如果未能解决你的问题,请参考以下文章
求sql中解决连接错误 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类 型
如何解决此错误:无法将类型“__NSCFString”(0x10354a248)的值转换为“UIImage”(0x104c42b48)