Swift下标可以返回一个变量吗?

时间:2014-06-03 23:02:15

标签: swift

在C#中,实际返回变量 12 的唯一索引器是数组索引器。

void Make42(ref int x) {x=42;}
void SetArray(int[] array){
    Make42(ref array[0]);} //works as intended; array[0] becomes 42
void SetList(List<int> list){
    Make42(ref list[0]);} //does not work as intended, list[0] stays 0

在上面的示例中,array[0]是变量,但list[0]不是。这是许多开发人员背后的罪魁祸首,编写高性能库,被迫编写自己的List实现(与内置List不同,暴露底层数组)以获得基准值表现超出语言。

在Swift中,ref被称为inoutindexer似乎被称为subscript。我想知道Swift subscript中是否有任何机制明确返回变量而不是(a value 可以是值类型或引用类型。)

1 个答案:

答案 0 :(得分:2)

如果我可以引入C ++的说法,那么您希望将引用返回给某个值。我在这里使用这个术语,因为编程人群通常会更好地理解它。

C#将其限制为只是数组的原因是,如果没有正确完成,则返回任意引用may compromise the language's safety guarantees

似乎没有语法在Swift中返回引用。由于返回引用很难验证,并且由于Swift相当新,并且因为它旨在成为一种安全的语言,所以Apple没有这样做是可以理解的。

如果达到需要这种性能的水平,你可能需要考虑使用C ++,在这种情况下,你可以牺牲几乎所有你想要获得性能的安全性。