diff --git a/modules/swagger-codegen/src/main/resources/objc/ApiClient-body.mustache b/modules/swagger-codegen/src/main/resources/objc/ApiClient-body.mustache index e37d26e755b..8f98a1305ca 100644 --- a/modules/swagger-codegen/src/main/resources/objc/ApiClient-body.mustache +++ b/modules/swagger-codegen/src/main/resources/objc/ApiClient-body.mustache @@ -436,7 +436,7 @@ static void (^reachabilityChangeBlock)(int); } // primitives - NSArray *primitiveTypes = @[@"NSString", @"NSDate", @"BOOL", @"NSNumber"]; + NSArray *primitiveTypes = @[@"NSString", @"NSDate", @"NSNumber"]; if ([primitiveTypes containsObject:class]) { if ([class isEqualToString:@"NSString"]) { @@ -445,22 +445,21 @@ static void (^reachabilityChangeBlock)(int); else if ([class isEqualToString:@"NSDate"]) { return [NSDate dateWithISO8601String:data]; } - else if ([class isEqualToString:@"BOOL"]) { - // Returns YES on encountering one of "Y", "y", "T", "t", or a - // digit 1-9—the method ignores any trailing characters - // NSString => BOOL => NSNumber - return [NSNumber numberWithBool:[data boolValue]]; - } else if ([class isEqualToString:@"NSNumber"]) { // NSNumber from NSNumber if ([data isKindOfClass:[NSNumber class]]) { return data; } - // NSNumber from NSString - else { - NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; - formatter.numberStyle = NSNumberFormatterDecimalStyle; - return [formatter numberFromString:data]; + else if ([data isKindOfClass:[NSString class]]) { + // NSNumber (NSCFBoolean) from NSString + if ([[data lowercaseString] isEqualToString:@"true"] || [[data lowercaseString] isEqualToString:@"false"]) { + return [NSNumber numberWithBool:[data boolValue]]; + // NSNumber from NSString + } else { + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.numberStyle = NSNumberFormatterDecimalStyle; + return [formatter numberFromString:data]; + } } } } diff --git a/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m b/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m index 9ebc48af348..7ea10315e81 100644 --- a/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m +++ b/samples/client/petstore/objc/SwaggerClient/SWGApiClient.m @@ -436,7 +436,7 @@ static void (^reachabilityChangeBlock)(int); } // primitives - NSArray *primitiveTypes = @[@"NSString", @"NSDate", @"BOOL", @"NSNumber"]; + NSArray *primitiveTypes = @[@"NSString", @"NSDate", @"NSNumber"]; if ([primitiveTypes containsObject:class]) { if ([class isEqualToString:@"NSString"]) { @@ -445,22 +445,21 @@ static void (^reachabilityChangeBlock)(int); else if ([class isEqualToString:@"NSDate"]) { return [NSDate dateWithISO8601String:data]; } - else if ([class isEqualToString:@"BOOL"]) { - // Returns YES on encountering one of "Y", "y", "T", "t", or a - // digit 1-9—the method ignores any trailing characters - // NSString => BOOL => NSNumber - return [NSNumber numberWithBool:[data boolValue]]; - } else if ([class isEqualToString:@"NSNumber"]) { // NSNumber from NSNumber if ([data isKindOfClass:[NSNumber class]]) { return data; } - // NSNumber from NSString - else { - NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; - formatter.numberStyle = NSNumberFormatterDecimalStyle; - return [formatter numberFromString:data]; + else if ([data isKindOfClass:[NSString class]]) { + // NSNumber (NSCFBoolean) from NSString + if ([[data lowercaseString] isEqualToString:@"true"] || [[data lowercaseString] isEqualToString:@"false"]) { + return [NSNumber numberWithBool:[data boolValue]]; + // NSNumber from NSString + } else { + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + formatter.numberStyle = NSNumberFormatterDecimalStyle; + return [formatter numberFromString:data]; + } } } } diff --git a/samples/client/petstore/objc/SwaggerClientTests/Tests/DeserializationTest.m b/samples/client/petstore/objc/SwaggerClientTests/Tests/DeserializationTest.m index 687eb5db7a3..0460a4be4af 100644 --- a/samples/client/petstore/objc/SwaggerClientTests/Tests/DeserializationTest.m +++ b/samples/client/petstore/objc/SwaggerClientTests/Tests/DeserializationTest.m @@ -149,4 +149,17 @@ XCTAssertTrue([result[0][0] isKindOfClass:[NSString class]]); } +- (void)testDeserializeBool { + NSString *data; + NSNumber *result; + + data = @"true"; + result = [apiClient deserialize:data class:@"NSNumber*"]; + XCTAssertTrue([result isEqual:@YES]); + + data = @"false"; + result = [apiClient deserialize:data class:@"NSNumber*"]; + XCTAssertTrue([result isEqual:@NO]); +} + @end