-1

我需要帮助解决错误:

无法使用类型为“(项目:[String],看到: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)
4

1 回答 1

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
}
于 2017-10-20T13:05:32.130 回答