Swift3 Swift 3&x27;编码';生产';无效';(aka';()';),不是预期的上下文结果类型XYZ?

Swift3 Swift 3&x27;编码';生产';无效';(aka';()';),不是预期的上下文结果类型XYZ?,swift3,xcode8,macos-sierra,Swift3,Xcode8,Macos Sierra,目前,我正在为我的'Note'对象编写'encode'(),为它们的序列化做准备。我到处寻找关于如何在Swift 3.0中序列化的教程,以及这个错误消息,但都没有用 此代码来自一个不相关的、以前的项目(从Swift 2.2转换为3.0),工作绝对正常: //Serialise the object. func encode(with aCoder: NSCoder) { aCoder.encodeCInt(personIDNumber, forKey: "per

目前,我正在为我的'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)中执行相同的操作:

这是发生的错误:

'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()”


我们将提前感谢您的帮助。

noteText
,属于(
Note
?)的类
encode(带:)
的属性属于给定类型,例如
XYZ
)。然而,
aCoder
(类型为
NSCoder
)的
encode(,forKey:)
方法是一种非返回函数:

请注意,此方法缺少显式返回类型。它不会像您所期望的那样返回类型为
XYZ
的值,并且当您尝试将调用
encode(u:forKey:)
的结果分配给属性(
noteText
)时,您将得到预期的类型不匹配,因为
noteText
不是类型
Void
(空元组,
()
),这是未指定返回类型的函数的默认返回

我不知道您想在这里实现什么,但是您不能将
编码(uuuxy:forKey:)
调用的返回分配给任何类型的属性(类型为
()
)的无用属性除外),因此删除此分配将消除问题标题的错误消息

// change this
noteText = aCoder.encode(noteText, forKey: "noteText")

// into
aCoder.encode(noteText, forKey: "noteText")

noteText
,属于(
Note
?)的类
encode(带:)
的属性,属于给定类型,例如
XYZ
。然而,
aCoder
(类型为
NSCoder
)的
encode(,forKey:)
方法是一种非返回函数:

请注意,此方法缺少显式返回类型。它不会像您所期望的那样返回类型为
XYZ
的值,并且当您尝试将调用
encode(u:forKey:)
的结果分配给属性(
noteText
)时,您将得到预期的类型不匹配,因为
noteText
不是类型
Void
(空元组,
()
),这是未指定返回类型的函数的默认返回

我不知道您想在这里实现什么,但是您不能将
编码(uuuxy:forKey:)
调用的返回分配给任何类型的属性(类型为
()
)的无用属性除外),因此删除此分配将消除问题标题的错误消息

// change this
noteText = aCoder.encode(noteText, forKey: "noteText")

// into
aCoder.encode(noteText, forKey: "noteText")

非常感谢!在回答您的问题时,我想做的是将此属性编码为二进制文件,作为Notes对象的一部分。在Swift 2.2中,据我记忆所及,你可以做我最初做的事情。@Paul很乐意帮忙。非常感谢!在回答您的问题时,我想做的是将此属性编码为二进制文件,作为Notes对象的一部分。在Swift 2.2中,据我记忆所及,你可以做我最初做的事情。@Paul很乐意帮忙。
// change this
noteText = aCoder.encode(noteText, forKey: "noteText")

// into
aCoder.encode(noteText, forKey: "noteText")