代码之家  ›  专栏  ›  技术社区  ›  user2121

NSNumber*到int的隐式转换

  •  1
  • user2121  · 技术社区  · 7 年前

    我有两个视图控制器VC1和VC2。VC1有一个文本字段和按钮。VC2的属性类型为NSNumber*。

    我试图将VC1中textfield中的值传递到VC2,因此我在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;
    }
    

    但我收到一个错误,上面写着: implicit conversion on int_nullable

    2 回复  |  直到 7 年前
        1
  •  2
  •   vadian    7 年前
    • NSNumber 是一个对象
    • int / NSInteger 是基元标量类型

    最简单的解决方案是创建一个 数字对象 对象来自 带ObjC文字

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

    @(123) 与相同 [NSNumber numberWithInteger:123]

        2
  •  0
  •   junaidsidhu    7 年前

    将NSString转换为Int

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

    // Using NSNumber methods
    NSNumber * number = [NSNumber numberWithInt:1234]; 
    
    // Using NSNumber literals
    NSNumber * number = @(1234);
    

    将字符串转换为NSNumber

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

    您的解决方案

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