Вы можете использовать интерполяцию строки, чтобы включить value
в строку.
class Test<T> {
var value:T
var name: String
init(text: String, val: T) {
name = text
value = val
}
func toString() -> String {
return "\(name): \(value)"
}
}
Не имеет отношения к вашей проблеме, но не объявляйте ни одну из ваших переменных как неявно развернутые Необязательные (!
после их типа), особенно когда вы устанавливаете их в инициализаторе. Вам также следует соблюдать соглашение об именах Swift, которое для типов является UpperCamelCase (Test
).
Согласно JLS, расширенное for
оператор , Ваш для цикла эквивалентен
int[] array = a;
for (int index = 0; index < a.length; index++) {
int i = array[index];
result += i;
}
, "где array
и index
сгенерированные компилятором идентификаторы, которые отличны от любых других идентификаторов (сгенерированный компилятором или иначе), которые находятся в объеме в точке, где расширенное for
оператор происходит". (немного перефразирование имен переменной здесь).
Так да: порядок абсолютно гарантируется.
См. раздел 14.14.2 из Спецификации языка Java, 3-й выпуск .
, Если тип Выражения является подтипом Повторяемых, то позволенный я быть типом выражения Expression.iterator (). Расширенное для оператора эквивалентно основному для оператора формы:
for (I #i = Expression.iterator(); #i.hasNext(); ) { VariableModifiersopt Type Identifier = #i.next(); Statement }
, Где #i является сгенерированным компилятором идентификатором, который отличен от любых других идентификаторов (сгенерированный компилятором или иначе), которые находятся в объеме (В§6.3) в точке, где расширенное для оператора происходит.
Это указывает в JLS что:
for ( VariableModifiersopt Type Identifier: Expression) Statement
эквивалентно
T[] a = Expression;
L1: L2: ... Lm:
for (int i = 0; i < a.length; i++) {
VariableModifiersopt Type Identifier = a[i];
Statement
}
Я ничего не нашел на странице, на которую Вы сослались, который подразумевал бы неисправное повторение. Можно ли отправить определенную кавычку?
В любом случае, я нахожу что этот код:
public static void main( String args[] ) {
double a[] = new double[] { 0, 1, 2, 3 };
int result = 0;
for ( double i : a ) {
result += i;
}
декомпиляции к цикличному выполнению старого стиля:
public static void main(String args[])
{
double a[] = {
0.0D, 1.0D, 2D, 3D
};
int result = 0;
double ad[];
int k = (ad = a).length;
for(int j = 0; j < k; j++)
{
double i = ad[j];
result = (int)((double)result + i);
}
}
, Конечно, это не то же как гарантия, но по крайней мере неисправное повторение по массиву было бы очень странным и, будет казаться, будет идти вразрез с очевидной реализацией здравого смысла.