使用 Swift 将结构附加到数组(在 iOS 中失败,但在 Playgrounds 中失败)

Posted

技术标签:

【中文标题】使用 Swift 将结构附加到数组(在 iOS 中失败,但在 Playgrounds 中失败)【英文标题】:Append a Struct to an Array using Swift (fails in iOS but not in Playgrounds) 【发布时间】:2021-06-03 02:49:05 【问题描述】:

这快把我逼疯了!此通用代码创建一个结构数组并附加一个新元素。它在 PlayGrounds 或 macOS 命令行工具项目中运行良好,但如果将其粘贴到 ios 项目(例如在 ViewController 中),它会失败:它不会将测验识别为数组。为什么?帮助/解决方案表示赞赏。谢谢!

struct Question 
    let text: String
    let answer: String
    
    init(q: String, a: String)
        text = q
        answer = a
    

    
var quiz = [
    Question(q: "A slug's blood is green.", a: "True"),
    Question(q: "Sky is blue", a: "True")
]

quiz.append(Question(q: "Ice is pink", a: "False")) //ERROR: Invalid redeclaration of 'quiz()'

【问题讨论】:

您确定这是在您的 iOS 项目中造成问题的全部代码吗?例如,您确定您还没有在某处声明另一个 quiz 吗? 100% 肯定@DávidPásztor。我为测试创建了一个全新的项目。即使重命名数组,错误仍然存​​在。太疯狂了! 【参考方案1】:

您的quiz.append 语句不在任何可执行函数中,所以它就像初始化一个名为“quiz”的对象的全新实例,因此您会收到“redeclaration”错误。

在 Playgrounds 中,我相信它会像脚本一样为您执行语句,因此您无需将其放入另一个方法中以便稍后调用。

将 quiz.append 语句像这样放在一个 func 中,错误应该会消失:

func quizAppend(q: Question) 
  quiz.append(q)

【讨论】:

我不工作@SuperTully。调用 quizAppend 将导致以下错误:“'quizAppend(q:)' 的重新声明无效”。顺便说一句,您的解决方案在 Playgrounds 中有效,但在 iOS 项目中无效。 我相信这可能与@Kirsteins 对此post 的回答有关,但我无法将这些点联系起来。

以上是关于使用 Swift 将结构附加到数组(在 iOS 中失败,但在 Playgrounds 中失败)的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将模型附加到数组中

你能用 swift 将字符串附加到 Firebase 数组吗

将 FMDB SQLite 结果附加到 Swift 数组

Swift 4 可解码 - 附加变量

Swift & Firestore - 使用 .arrayUnion() 将字典附加到嵌套数组

尝试将数组附加到 Swift 中的其他数组时获取“无关参数标签”