swift 无法将类型“[Liquor]”的值转换为预期的参数类型“inout _”

Posted

技术标签:

【中文标题】swift 无法将类型“[Liquor]”的值转换为预期的参数类型“inout _”【英文标题】:swift Cannot convert value of type '[Liquor]' to expected argument type 'inout _' 【发布时间】:2016-10-29 02:31:22 【问题描述】:

我遇到了一些类似的问题,但仍然无法弄清楚为什么会发生这种情况。

var liquors = [Liquor]()

func loadSampleLiquors()
    let photo1 = UIImage(named: "Chateau Lafite Rothschild 1993")
    let liquor1 = Liquor(name: "Chateau Lafite Rothschild", year: "1993", photo: photo1, rating: 7)
    liquors += [liquor1] // Here is the error happen     

错误消息是:无法将类型“[Liquor]”的值转换为预期的参数类型“inout _”

这可能是因为“年份”可能为零,但我检查了我的代码,它应该可以正常工作,我尝试使用“如果让酒 = xxx”来修复它,但随后会有一个 EXC_BAD_INSTRUCTION decode 函数,所以我把我所有的代码贴在这里:

这是我的酒类:

var name: String
var year: String
var photo: UIImage?
var rating: Int

struct PropertyKey 
    static let nameKey = "name"
    static let yearKey = "year"
    static let photoKey = "photo"
    static let ratingKey = "rating"

我使用 NSCoding 来存储数据:

func encode(with aCoder: NSCoder) 
    aCoder.encode(name, forKey: PropertyKey.nameKey)
    aCoder.encode(year, forKey: PropertyKey.yearKey)
    aCoder.encode(photo, forKey: PropertyKey.photoKey)
    aCoder.encode(rating, forKey: PropertyKey.ratingKey)


required convenience init?(coder aDecoder: NSCoder) 
    let name = aDecoder.decodeObject(forKey: PropertyKey.nameKey) as! String
    let year = aDecoder.decodeObject(forKey: PropertyKey.yearKey) as! String
    let photo = aDecoder.decodeObject(forKey: PropertyKey.photoKey) as? UIImage
    let rating = aDecoder.decodeInteger(forKey: PropertyKey.ratingKey)
    self.init(name: name, year:year, photo: photo, rating: rating)

【问题讨论】:

liquors的声明在哪里? @AlexanderMomchliov 我只是添加它 我要求声明liquors,而不是liquor 我的错,改变它@AlexanderMomchliov 顺便说一句,如果您只是存储静态常量,最好使用没有案例的枚举。 【参考方案1】:

您缺少 unwrap 运算符。试试这个:

let liquor1 = Liquor(name: "Chateau Lafite Rothschild", year: "1993", photo: photo1, rating: 7)!

注意“!”最后

你需要解包的原因是因为 Liquor init 可以返回 nil,所以它返回一个可选项。那是?在初始化结束时

required convenience init?

【讨论】:

以上是关于swift 无法将类型“[Liquor]”的值转换为预期的参数类型“inout _”的主要内容,如果未能解决你的问题,请参考以下文章

Swift:无法将“NSDate”类型的值转换为预期的参数类型“NSDateComponents”

Swift:无法将“UnsafeMutablePointer”类型的值转换为预期的参数类型“UnsafeMutablePointer”

Swift 1.2 到 Swift 2:无法将类型的值转换为预期的参数类型

Swift 无法将 CBPeripheral 类型的值转换为预期的参数类型

Swift:无法将类型“[String:DayData]”的值转换为预期的参数类型“AnyObject?”

从 Swift 2.3 -> 3.2 转换时,无法将 String 类型的值转换为指定类型 NSManagedObjectContext