【问题标题】:implicit conversion of int to NSString is disallowed with arc in Objective-CObjective-C 中的 arc 不允许将 int 隐式转换为 NSString
【发布时间】:2016-03-30 07:31:53
【问题描述】:


有人可以建议我哪里出错了吗?

【问题讨论】:

  • 您要达到的目的请解释一下
  • 请发布(相关的)代码(以及确切的错误消息),而不是屏幕截图的链接。

标签: objective-c ios9.2


【解决方案1】:

尝试像这样编写 curl url:-

NSString* curlURL = [NSString stringWithFormat:@"https://api.500px.com/v1/photos?.....rpp=20&page=%d", 123];

希望给定的字符串格式对您有所帮助.. 谢谢

【讨论】:

    【解决方案2】:

    一个更详细的问题。 首先快速回复:

    你不能从 objC 调用 swift plain 函数。 您可以调用方法,但不能调用普通的 f。

    见下文:

    // 快速类:

    @objc class Klass: NSObject {
    
        var a = 100
        
         @objc public func F1()->String{
            return "F1"
        }
    
        
        @objc public func F2()->NSString{
            return "f2"
        }
    
    }
    
    func myF()->String{
        return "FFF"
    }
    
    
    func myG()->NSString{
        return "GGG"
    }
    

    在 objC 中:

    @implementation ViewController
    
    - (void)viewDidLoad {
    
        [super viewDidLoad];
        Klass* k = [Klass new];
        
        NSString * s1 = [k F1];
        NSString * s2 = [k F2];
    
        s1 = k.F1;
        s2 = k.F2;
        
        NSString * sf = myF(); // ERROR! ... Implicit conversion of 'int' to 'NSString *' is disallowed with ARC
        NSString * sg = myG(); // ERROR!     "      "   "
    }
    

    如果添加纯 C 代码(添加包含等...)

    包括“plainFunctions.h”

    //file:plainFunctions.c
    #include "plainFunctions.h"
    
    int myN()
    {
        return 100;
    }
    

    您可以致电:

    - (void)viewDidLoad {
    
        [super viewDidLoad];
        int n = myN();
    }
    

    甚至:

    //h:
    char * myC(void);
    
    
    // objC:
        NSString * fromC = [NSString stringWithCString:myC() encoding: NSUTF8StringEncoding];
    

    【讨论】:

      【解决方案3】:

      当心comma operator。消息说... disallowed with ARC 是一个红鲱鱼,这里的问题是您正在为NSString* 分配一个数字。

      从你的截图中看不太清楚,我在这里总结一下:

      NSString *currurl = (@"https://some-string-%d", 'abcd');
      

      .. 看起来您正在尝试编写 NSString*

      但是,编译器正在评估一个由NSString*、逗号运算符和一个字符组成的表达式,其中结果是该逗号运算符的右手操作数。所以它试图将abcd 分配给currurl

      请记住,字符在基于 C 的语言中是整数类型(在 Java 中也是如此),因此投诉 Implicit conversion of 'int' to 'NSString *'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多