В последней версии matplotlib (3.0.3) аргумент 'c' должен быть двумерным массивом. Если длина «c» совпадает с длиной «x» и «y», цвет каждой точки соответствует элементу «c». Если вы хотите, чтобы каждая точка отображала один и тот же цвет, 'c' должен быть двумерным массивом с одной строкой, например c = np.array ([0.5, 0.5, 0.5]). С наилучшими пожеланиями!
Вы должны использовать:
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 = @"...";
Не используйте const
с объектами Objective-C, они на самом деле не были предназначены для используй это. Объекты NSString
(среди многих других) уже являются неизменяемыми по умолчанию в силу своего дизайна, поэтому делать их const
бесполезно.
Как предложил e.James , вы можете использовать NSString * const
, который является постоянным указателем на NSString
. Это немного отличается от const NSString *
(эквивалентно NSString const *
), который является указателем на константу NSString
. Использование NSString * const
не позволяет переназначить kPoly
для указания на новый объект NSString
.
Я бы предложил даже сделать константу более описательной. Константа для числа сторон многоугольника может прийти откуда угодно. В качестве предложения, как насчет:
kDefaultsPolygonNumberOfSides;
вместо.
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