简体   繁体   中英

implicit conversion NSNumber* to int

i have two view controllers VC1 and VC2. VC1 has a textField and button. the VC2 has a property of type NSNumber* .

I am trying to pass the value in the textfield in VC1 to VC2, so I did the following in VC1

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:SEGUE_IFENTIFIER_TO_DETAILS_VIEW_CONTROLLER]) {

    ((DetailsViewController *)  
    segue.destinationViewController).receivedData =
    self.textFieldValueToDispatch.text.intValue;
}

but I receive an error saying : implicit conversion on int_nullable

how to solve it

  • NSNumber is an object
  • int / NSInteger is a primitive scalar type

Both types are not interchangeable.

The easiest solution is to create an NSNumber object from NSInteger with ObjC literal

((DetailsViewController *)segue.destinationViewController).receivedData =
                         @(self.textFieldValueToDispatch.text.integerValue);

@(123) is the same as [NSNumber numberWithInteger:123]

Converting NSString to Int

int value = [@"1234" integerValue]; // Int Type

Converting Int to NSNumber

// Using NSNumber methods
NSNumber * number = [NSNumber numberWithInt:1234]; 

// Using NSNumber literals
NSNumber * number = @(1234);

Converting String to NSNumber

// Using NSNumber methods
NSNumber * number = [NSNumber numberWithInt:[@"" integerValue]];

// Using NSNumber literals
NSNumber * number = @([@"" integerValue]);

Your Solution

((DetailsViewController *) segue.destinationViewController).receivedData =
@([self.textFieldValueToDispatch.text integerValue]);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM