swift: изменение массивов внутри словарей

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

27
задан maltalef 2 July 2014 в 14:47
поделиться

1 ответ

Вот то, что я говорил Нейту Куку, в комментариях к его качественному ответу. Это то, что я считаю «легким [добавлением] элементов в массив внутри словаря»:

dict["key"] = dict["key"]! + 4
dict["key"] = dict["key"] ? dict["key"]! + 4 : [4]

Сейчас нам нужно определить оператор + самостоятельно.

@infix func +<T>(array: T[], element: T) -> T[] {
    var copy = array
    copy += element
    return copy
}

Я думаю, что эта версия снимает слишком много безопасности; Может быть, определить его с помощью составного оператора?

@infix func +<T>(array: T[]?, element: T) -> T[] {
    return array ? array! + element : [element]
}

dict["key"] = dict["key"] + 4

Наконец, это самое чистое, что я могу получить, но я не совсем понимаю, как работают значения / ссылки на массивы в этом примере.

@assignment func +=<T>(inout array: T[]?, element: T) {
    array = array + element
}

dict["key"] += 5
1
ответ дан Jessy 2 July 2014 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: