斯威夫特阵列可选类型和下标(测试版3) [英] Swift Array optional Type and subscripting (Beta 3)

查看:129
本文介绍了斯威夫特阵列可选类型和下标(测试版3)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我继2014年WWDC教程408:利用X code Beta 3中(30分钟),斯威夫特操场。自Beta 2的雨燕语法已更改。

I'm following the 2014 WWDC tutorial 408: Swift Playgrounds using XCode Beta 3 (30 minutes in). The Swift syntax has changed since Beta 2.

var data = [27, 46, 96, 79, 56, 85, 45, 34, 2, 57, 29, 66, 99, 65, 66, 40, 40, 58, 87, 64]

func exchange<T>(data: [T], i: Int, j: Int) {
    let temp = data[i]
    data[i] = data[j]  // Fails with error '@lvalue $T8' is not identical to 'T'
    data[j] = temp     // Fails with error '@lvalue $T5' is not identical to 'T'
}

exchange(data, 0 , 2)
data

为什么我不能修改这样一个可变的整数数组?

Why I can't modify a mutable integer array in this way?

推荐答案

由于子程序参数是隐式定义让因此,非可变的。尝试改变声明:

Because subroutine parameters are implicitly defined with let hence, non mutable. Try changing the declaration to:

func exchange<T>(inout data: [T], i: Int, j: Int) {

和调用为:

exchange(&date, 0, 2)

您也可以使用 VAR 但只允许数组的子程序中被修改。对于测试3最大的变化是使阵列真的值而不是传递只是一种八九不离十按值传递一些时间,但没有休息。

You can also use var but that would only allow the array to be modified within the subroutine. The big change for beta 3 was to make arrays really pass by value instead of just kind of sorta pass by value some of the time, but not the rest.

这篇关于斯威夫特阵列可选类型和下标(测试版3)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆