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];
有人可以建议我哪里出错了吗?
尝试像这样写 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];