summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinh Nguyễn <mxn@1ec5.org>2016-10-10 15:56:43 -0700
committerMinh Nguyễn <mxn@1ec5.org>2016-10-17 11:47:22 -0700
commitcf5aa9c6488a1aef1ce5fd63488ead0a215029d4 (patch)
tree03ea0ebb6869bda2b39ef1d5a6cadeda55471d39
parent9652028915af6602626939e0b0075333c34bfbfe (diff)
downloadqtlocation-mapboxgl-cf5aa9c6488a1aef1ce5fd63488ead0a215029d4.tar.gz
[ios, macos] Designated initializers
Added designated initializers to MGLStyleValue and friends. Restored custom equality and descriptions to MGLStyleFunction. Raise an exception if an unrecognized subclass of MGLStyleValue or MGLStyleValue itself is passed into a style attribute property.
-rw-r--r--platform/darwin/src/MGLStyleValue.h7
-rw-r--r--platform/darwin/src/MGLStyleValue.mm27
-rw-r--r--platform/darwin/src/MGLStyleValue_Private.h6
3 files changed, 33 insertions, 7 deletions
diff --git a/platform/darwin/src/MGLStyleValue.h b/platform/darwin/src/MGLStyleValue.h
index 1f19a5e028..010a0d68cb 100644
--- a/platform/darwin/src/MGLStyleValue.h
+++ b/platform/darwin/src/MGLStyleValue.h
@@ -13,7 +13,9 @@
+ (instancetype)valueWithRawValue:(T)rawValue;
-- (instancetype)initWithRawValue:(T)rawValue;
+- (instancetype)init NS_UNAVAILABLE;
+
+- (instancetype)initWithRawValue:(T)rawValue NS_DESIGNATED_INITIALIZER;
@property (nonatomic) T rawValue;
@@ -22,9 +24,10 @@
@interface MGLStyleFunction<T> : MGLStyleValue
+ (instancetype)functionWithBase:(CGFloat)base stops:(NSDictionary<NSNumber *, MGLStyleValue<T> *> *)stops;
+
+ (instancetype)functionWithStops:(NSDictionary<NSNumber *, MGLStyleValue<T> *> *)stops;
-- (instancetype)initWithBase:(CGFloat)base stops:(NSDictionary<NSNumber *, MGLStyleValue<T> *> *)stops;
+- (instancetype)initWithBase:(CGFloat)base stops:(NSDictionary<NSNumber *, MGLStyleValue<T> *> *)stops NS_DESIGNATED_INITIALIZER;
@property (nonatomic) CGFloat base;
@property (nonatomic, copy) NSDictionary<NSNumber *, MGLStyleValue<T> *> *stops;
diff --git a/platform/darwin/src/MGLStyleValue.mm b/platform/darwin/src/MGLStyleValue.mm
index f8d5fd3a5d..43b51d6788 100644
--- a/platform/darwin/src/MGLStyleValue.mm
+++ b/platform/darwin/src/MGLStyleValue.mm
@@ -33,6 +33,10 @@
return [self.rawValue description];
}
+- (NSString *)debugDescription {
+ return [self.rawValue debugDescription];
+}
+
- (BOOL)isEqual:(MGLStyleConstantValue *)other {
return [other isKindOfClass:[self class]] && [other.rawValue isEqual:self.rawValue];
}
@@ -54,18 +58,31 @@
}
- (instancetype)init {
- if (self = [super init]) {
- _base = 1;
- }
- return self;
+ return [self initWithBase:1 stops:@{}];
}
- (instancetype)initWithBase:(CGFloat)base stops:(NSDictionary *)stops {
- if (self = [self init]) {
+ if (self = [super init]) {
_base = base;
_stops = stops;
}
return self;
}
+- (NSString *)description {
+ return [NSString stringWithFormat:@"<%@: %p, base = %f; stops = %@>",
+ NSStringFromClass([self class]), (void *)self,
+ self.base,
+ self.stops];
+}
+
+- (BOOL)isEqual:(MGLStyleFunction *)other {
+ return ([other isKindOfClass:[self class]] && other.base == self.base
+ && [other.stops isEqualToDictionary:self.stops]);
+}
+
+- (NSUInteger)hash {
+ return self.base + self.stops.hash;
+}
+
@end
diff --git a/platform/darwin/src/MGLStyleValue_Private.h b/platform/darwin/src/MGLStyleValue_Private.h
index e48db02bf1..cc3fecec7e 100644
--- a/platform/darwin/src/MGLStyleValue_Private.h
+++ b/platform/darwin/src/MGLStyleValue_Private.h
@@ -42,6 +42,12 @@ public:
mbglStops.emplace_back(zoomKey.floatValue, mbglStopValue.asConstant());
}];
return mbgl::style::Function<MBGLType>({{mbglStops}}, function.base);
+ } else if (value) {
+ [NSException raise:@"MGLAbstractClassException" format:
+ @"The style value %@ cannot be applied to the style. "
+ @"Make sure the style value was created as a member of a concrete subclass of MGLStyleValue.",
+ NSStringFromClass([value class])];
+ return {};
} else {
return {};
}