Objective-C 中的 arc 不允许将 int 隐式转换为 NSString

implicit conversion of int to NSString is disallowed with arc in Objective-C


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

尝试像这样写 curl url :-

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

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

当心 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 *'

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

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

见下文:

// swift class:

@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];