Swift:`Type'[String]'不符合协议'StringLiteralConvertible'

时间:2014-12-24 00:24:34

标签: ios xcode swift

我正在玩Swift和Xcode。这适用于游乐场:

[["1","2"], ["3","4"]][0]

但这在Xcode项目中不起作用:

enum UnitSystem: Int {
    case Standard = 0
    case Metric = 1
}

class ViewController: UIViewController, UITextFieldDelegate, UIPickerViewDelegate {
    @IBOutlet weak var unitSystemControl: UISegmentedControl!  //"Standard" and "Metric"
    var units: [[String]]! = nil
    var currentUnitSystem: UnitSystem! = nil
    override func viewDidLoad() {
        super.viewDidLoad()
        ...
        currentUnitSystem = UnitSystem(rawValue: unitSystemControl.selectedSegmentIndex)
        units = [["ft.", "in."], ["m.", "cm."]][currentUnitSystem.rawValue]
    }
    ...
    ...
}

我收到此错误:Type '[String]' does not conform to protocol 'StringLiteralConvertible'

的问题:

  • 如何处理此错误?
  • 是否有更清洁/更好的方式来动态切换单位?
  • 好像我不太了解整个想法!和? Swift中的类型,是否有一个易于理解的教程?

谢谢!

1 个答案:

答案 0 :(得分:0)

此问题与您对选项的使用无关。它比那简单。

在您的游乐场中,查看[["1","2"], ["3","4"]][0]返回的值。它不是[[String]](字符串数组的数组)。它是[String](数组数组中的第一个条目)。

但在第二个示例中,您尝试将此值分配给类型为[[String]]的变量。只需将units的类型更改为[String]