2014-11-05 68 views
8

我管理不同的语言,在一个小的单窗格应用程序,使用不同的字符串数组为每个评论,索引整型变量“userLang”,然后设置标签.text = array [index]。基本代码是:Swift:预期的声明错误设置“标签”为一个字符串变量

import UIKit 
class ViewController: UIViewController { 
    var userLang = 0 
    var arrayOne = ["hi", "hola"] 
    var arrayTwo = ["Bye", "Adios"] 
    @IBOutlet weak var msgArrayOne: UILabel! 
    @IBOutlet weak var msgArrayTwo: UILabel! 

    msgArrayOne.text = arrayOne[userLang] //Error here: !Expected declaration 
    msgArrayTwo.text = arrayTwo[userLang] //odd, but this line gets no error until I 
              //remove the first line above, then 
              //this line gets the same error. 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    } 

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

我不断收到“预期声明”错误。我已经尝试在引号(而不是数组)中使用简单的字符串作为测试,并且仍然得到相同的错误。我搜查了网页&没有找到任何解决问题的建议。我尝试改变名称,如果标签,以防我使用“保留”引用。

我搜索了Apple的Swift开发者手册&找不到合适的标签语法。这个语法在其他项目中有效,所以我不确定发生了什么。我甚至尝试复制/粘贴相关章节到一个新项目(在线建议之一,在Xcode bug的情况下),没有更好的结果。我注意到小的差异(空间或资本)可以在Swift中产生很大的差异。有什么我在这里做错了吗?有什么建议么?

回答

22
msgArrayOne.text = arrayOne[userLang] 
msgArrayTwo.text = arrayTwo[userLang] 

这些不是声明,您需要将它们移动到viewDidLoad()或其他适当的位置。您的标签语法很好,但是您的代码在类中错误的位置。

+1

谢谢!你说的话很直观。设置标签字段是分配,而不是声明,需要成为动作/功能的一部分。暂时,我添加了一个按钮,将其作为一个动作拖入代码中,将所有标签分配放入其中,并且错误消失 - 代码成功编译。最终,我会把它放在一个选择器视图中,但我仍然在学习这个语法(有点复杂)。 – Rob 2014-11-05 22:29:44