【问题标题】:Swift compiler error: Bitcast requires both operands to be pointer or neitherSwift 编译器错误:Bitcast 要求两个操作数都是指针或两者都不是
【发布时间】:2014-06-15 15:33:39
【问题描述】:

我在以下类中遇到上述编译器错误:

class Log: NSObject, NSCoding {

var targetHoursPerWeek: Double
var weeksLog: Double[]

// Serialization keys that are using to implement NSCoding.
struct SerializationKey {
    static let targetHoursPerWeek = "targetHoursPerWeek"
    static let weeksLog = "weeksLog"
}

init() {

    targetHoursPerWeek = 7.0
    weeksLog = Double[](count: 7, repeatedValue: 0.0)
    // [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

}

// MARK: NSCoding

init(coder decoder: NSCoder) {
    targetHoursPerWeek = decoder.decodeObjectForKey(SerializationKey.targetHoursPerWeek) as Double
     weeksLog = decoder.decodeObjectForKey(SerializationKey.weeksLog) as Double[]
}

func encodeWithCoder(encoder: NSCoder) {
    encoder.encodeObject(targetHoursPerWeek, forKey: SerializationKey.targetHoursPerWeek)
    encoder.encodeObject(weeksLog, forKey: SerializationKey.weeksLog)
}

}

我认为错误来自线路

 weeksLog = decoder.decodeObjectForKey(SerializationKey.weeksLog) as Double[]

但如果是这样的话,我很难过——“as Double[]”同意“weeksLog”的声明。 所以我被难住了!

【问题讨论】:

  • 我复制了这个并阅读了完整的编译器错误消息。在较低的级别上出现了问题。所以这肯定是一个错误。你应该举报。
  • 但是你错了:如果你删除这一行,编译器运行良好:encoder.encodeObject(weeksLog, forKey: SerializationKey.weeksLog)。也许您可以编写一个不会导致编译器出现问题的解决方法。
  • 我会尝试解决方法。你有什么建议吗?
  • 感谢您指出错误位置。这给了我一些工作。
  • 现在可以使用了:encoder.encodeObject(weeksLog as AnyObject[], forKey: SerializationKey.weeksLog) 谢谢!!

标签: ios swift nscoding


【解决方案1】:

更新

我将 weekLog 更改为可选项并更改为 as?并编译。

var weeksLog: Double[]?

weeksLog = decoder.decodeObjectForKey(SerializationKey.weeksLog) as? Double[]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2018-09-14
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多