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
被称为inout
而indexer
似乎被称为subscript
。我想知道Swift subscript
中是否有任何机制明确返回变量而不是值(a value 可以是值类型或引用类型。)
答案 0 :(得分:2)
如果我可以引入C ++的说法,那么您希望将引用返回给某个值。我在这里使用这个术语,因为编程人群通常会更好地理解它。
C#将其限制为只是数组的原因是,如果没有正确完成,则返回任意引用may compromise the language's safety guarantees。
似乎没有语法在Swift中返回引用。由于返回引用很难验证,并且由于Swift相当新,并且因为它旨在成为一种安全的语言,所以Apple没有这样做是可以理解的。
如果达到需要这种性能的水平,你可能需要考虑使用C ++,在这种情况下,你可以牺牲几乎所有你想要获得性能的安全性。