Используя постоянный NSString как ключ для NSUserDefaults

В последней версии matplotlib (3.0.3) аргумент 'c' должен быть двумерным массивом. Если длина «c» совпадает с длиной «x» и «y», цвет каждой точки соответствует элементу «c». Если вы хотите, чтобы каждая точка отображала один и тот же цвет, 'c' должен быть двумерным массивом с одной строкой, например c = np.array ([0.5, 0.5, 0.5]). С наилучшими пожеланиями!

85
задан e.James 15 April 2009 в 23:36
поделиться

4 ответа

Вы должны использовать:

NSString * const kPolygonNumberOfSides = @"..."; // const pointer

вместо:

NSString const * kPolygonNumberOfSides = @"..."; // pointer to const

Первый - это постоянный указатель на объект NSString, в то время как второй - указатель на постоянный объект NSString.

Это небольшая разница. Предупреждение компилятора происходит из-за того, что setObject: forKey: объявлен следующим образом:

- (void)setObject:(id)value forKey:(NSString *)defaultName;

Ожидается, что аргумент defaultName будет иметь тип NSString * . Когда вы вместо этого передаете указатель на константу, вы даете ей что-то другое.

Обновление: Я хочу отметить, что эти константы должны быть определены как static , если они только будет использоваться из одного файла. Я говорю это потому, что сам столкнулся с этой проблемой: если вы не объявите их как статические, они будут существовать в глобальном пространстве имен, и вы не сможете использовать переменную с таким же именем в другом файле. см. Константы в Objective-C для получения дополнительной информации. Для пояснения на примере это то, что я сейчас использую для ключей, которые мне нужно использовать только в одном файле .m :

static NSString * const kSomeLabel = @"...";
205
ответ дан Community 24 November 2019 в 08:09
поделиться

Не используйте const с объектами Objective-C, они на самом деле не были предназначены для используй это. Объекты NSString (среди многих других) уже являются неизменяемыми по умолчанию в силу своего дизайна, поэтому делать их const бесполезно.

Как предложил e.James , вы можете использовать NSString * const , который является постоянным указателем на NSString . Это немного отличается от const NSString * (эквивалентно NSString const * ), который является указателем на константу NSString . Использование NSString * const не позволяет переназначить kPoly для указания на новый объект NSString .

32
ответ дан Community 24 November 2019 в 08:09
поделиться

Я бы предложил даже сделать константу более описательной. Константа для числа сторон многоугольника может прийти откуда угодно. В качестве предложения, как насчет:

kDefaultsPolygonNumberOfSides;

вместо.

5
ответ дан 24 November 2019 в 08:09
поделиться

For additional background about this issue, there is an excellent article on Wikipedia explaining the constant syntax with pointers: http://en.wikipedia.org/wiki/Const_correctness#Pointers_and_references

3
ответ дан 24 November 2019 в 08:09
поделиться