无法将字符串分配给Swift函数中的数组元素

时间:2014-10-27 17:34:22

标签: swift

下面代码中的两个赋值行都给出了这个错误:

  

' @ |价值$ T5'与' String'

不同
   func PrintShoppingList(myList: Array<String>)
    {
        println(myList)
        var cabbage = "cabbage"
        let fish:String = "fish"
        myList[0] = cabbage
        myList[1] = fish
    }

有什么问题?

2 个答案:

答案 0 :(得分:5)

默认情况下,参数是常量,您不能改变它们。您可以将它们更改为var,但这将是数组的副本。

func PrintShoppingList(var myList: Array<String>)
{
    println(myList)
    var cabbage = "cabbage"
    let fish:String = "fish"
    myList[0] = cabbage
    myList[1] = fish
}

您也可以使用inout参数来改变原始值,但请记住,数组长度不能通过上标扩展,因此myList[1] = fish会在这种情况下崩溃。

func PrintShoppingList(inout myList: Array<String>)
{
    println(myList)
    var cabbage = "cabbage"
    let fish:String = "fish"
    myList[0] = cabbage
    myList.append(fish)
} 

答案 1 :(得分:3)

这里的问题是传递给函数的参数默认设置为常量并且是不可变的。所以你需要将它声明为var以便能够改变它。

func PrintShoppingList(var myList: Array<String>)
{
    println(myList)
    var cabbage = "cabbage"
    let fish:String = "fish"
    myList[0] = cabbage
    myList[1] = fish
    print(myList)
}

如果传递少于2个元素的数组,您的应用可能会崩溃,因为您正在访问 myList [0] myList [1] 。因此,请确保您的数组至少包含要将数组传递给此方法的元素。