Swift:不需要的全局变量声明

Posted

技术标签:

【中文标题】Swift:不需要的全局变量声明【英文标题】:Swift: Global Var Declaration Unwanted 【发布时间】:2015-08-20 05:19:45 【问题描述】:
import UIKit

var options = [String]()

var correctAns = Int()

var question : String


class quizController: UIViewController 

    @IBOutlet weak var questionLabel: UILabel!

    @IBOutlet weak var button1: UIButton!

    @IBOutlet weak var button2: UIButton!

    @IBOutlet weak var button3: UIButton!

    @IBOutlet weak var button4: UIButton!


    init() 

        question = "What quiz are you taking?"
        options = ["Medical", "Bollywood", "Math", "Trivia"]
        correctAns = 0



    

    struct shuffle 

        var readyToAskQuestions : [quizController] 

            var questions = Array(arrayLiteral: question)
            questions.count = questionNum

            questions.shuffleInPlace()
            return questions
        
        init() 




        
    

    required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    


    override func viewDidLoad() 
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

我在全局 var 问题中遇到错误:需要初始化的字符串行(全局 'var' 声明需要初始化表达式或 getter/setter 说明符)。

但是,如果我尝试初始化它,我会在结构中遇到几个错误:

questions.count = questionNum -- 错误:无法分配给属性:“count”是一个只能获取的属性。 questions.shuffleInPlace -- 错误:'[String]' 没有名为 shuffleInPlace 的成员。 返回问题 -- 错误:无法将“@lvalue [String”类型的返回表达式转换为预期的返回类型“[quizController]”

如何重构我的代码,以便在初始化全局变量时不会遇到这些错误。

【问题讨论】:

放一个?在var question : String 之后,就像var question : String? 对于初学者一样,您将它声明为非可选类型,但它是不允许的 null 它修复了全局 var 错误,但我提到的结构中的这 3 个错误与以前一样出现。我忘了提到 super.viewDidLoad() 有一个“声明仅在文件范围内有效”错误。我知道这意味着什么,但我不知道如何解决。 【参考方案1】:
    questions.count = questionNum -- 错误:无法分配给属性:'count' 是一个 get-only 属性。原因:很清楚,数组的计数是一个只读属性.你不能给它赋值,你也不需要这样做.. questions.shuffleInPlace -- 错误:“[String]”没有名为 shuffleInPlace 的成员原因: questionsString 的数组。 Swift 数组没有名为 shuffleInPlace 的方法。 返回问题 -- 错误:无法将类型“@lvalue [String”的返回表达式转换为预期的返回类型“[quizController]”。原因:查看readyToAskQuestions 的类型quizController 的数组,您将其定义为可计算属性。它期望 [quizController] 作为返回值,而不是返回 [String],这是错误的。

您似乎对 Swift 很陌生。在这个答案中无法让您清楚所有这些事情。强烈推荐阅读 Apple swift 编程电子书。

【讨论】:

我是,这是我的第一个应用程序。谢谢。

以上是关于Swift:不需要的全局变量声明的主要内容,如果未能解决你的问题,请参考以下文章

全局变量/常量如何在 swift 中变得懒惰

JS关于全局变量的问题

js中怎么把一个变量变成全局变量

不同.c文件中声明的全局变量的使用理解

Chapter 14_2 全局变量声明

何时在 Swift 中使用全局变量