目前,我正在为我的'Note'对象编写'encode'(),为它们的序列化做准备。对于如何在Swift 3.0中进行序列化以及此错误消息的教程,我看起来很高和很低,但无济于事。
这个代码来自一个不相关的,以前的项目(从Swift 2.2转换为3.0),工作得非常好:
//Serialise the object.
func encode(with aCoder: NSCoder)
{
aCoder.encodeCInt(personIDNumber, forKey: "personIDNumber")
aCoder.encode(staffName, forKey: "staffName")
aCoder.encode(userName, forKey: "userName")
aCoder.encode(age, forKey: "age")
}
但是,如果我尝试在我当前的项目(在Swift 3.0中启动)中执行相同的操作:
public func encode(with aCoder: NSCoder)
{
noteText = aCoder.encode(noteText, forKey: "noteText")
}
这是发生的错误:
'encode' produces 'Void' (aka '()'), not the expected contextual result type String? ***Bizzarely, this also causes every 'encode' function that's available with NSCoder-type objects to be struck-through, as though deprecated, which obviously isn't true***.
我的'decode'()如下所示,编译器很满意:
required public init (coder aDecoder: NSCoder)
{
noteText = aDecoder.decodeObject(forKey: "noteText") as! String?
}
所以,我追求的是:
•关于如何解决这个错误的一系列明确的步骤(仅仅因为我还是Swift的新手,并且我对这个消息以及追随我的人都非常感到难过)。
•解释为什么会发生这种情况,以及为什么(如果可能的话),我的'decode()'在我给出的两种情况下完全可以接受,但是'encode()'
感谢任何帮助,并提前感谢。
答案 0 :(得分:0)
noteText
,类encode(with:)
的属性属于(Note
?),属于给定类型,例如XYZ
。 encode(, forKey:)
(类型aCoder
)的NSCoder
方法是非返回函数,with signatures looking like :
func encode(_ realv: Double, forKey key: String)
请注意,此方法缺少显式返回类型。 not 返回类型为XYZ
的值(如您所期望的那样),并且当您尝试将调用结果分配给encode(_:forKey:)
属性({{1} }),您将得到预期的类型不匹配,因为noteText
不是noteText
类型(空元组,Void
),这是没有指定返回类型的函数的默认返回。
我不知道你想在这里实现什么,但是你不能将()
调用的返回分配给任何类型的属性(类型为encode(_:forKey:)
的无用属性除外),因此,删除此作业将使您摆脱问题标题的错误消息。
()