我用伪代码做了一些方法,我想创建客观的 C 方法。你能帮我定义一下吗?我对目标C不是很熟悉,所以我很困惑。另外,我想使用字符串作为方法的参数,而不是 NSString 对象。
这是方法定义。我不确定它是否符合客观的 C 定义,我也不确定“字符串”类型。
-(BOOL) testMethod(string largestring, string smallstring) {
return true;
}
我是否必须包含一些库才能使用字符串类型?谢谢。
我用伪代码做了一些方法,我想创建客观的 C 方法。你能帮我定义一下吗?我对目标C不是很熟悉,所以我很困惑。另外,我想使用字符串作为方法的参数,而不是 NSString 对象。
这是方法定义。我不确定它是否符合客观的 C 定义,我也不确定“字符串”类型。
-(BOOL) testMethod(string largestring, string smallstring) {
return true;
}
我是否必须包含一些库才能使用字符串类型?谢谢。
那么这里有多种方法:
extern "C"
..mm
使用扩展名(即 Objective-C++)命名您的 Objective-C 代码并直接调用 C++。有一些限制:
-(void) dealloc
.一个很好的观点:
你的方法应该是这样的
-(BOOL) testMethodWithLargeString:(NSString *)largestring smallString(NSString *)smallstring {
return YES;
}
要访问此方法:
BOOL result = [<classObject> testMethodWithLargeString:string1 smallString:string2];
如果方法在 self 类中,则使用,self
否则您需要使用对象或类。
此外,编写多个参数化方法的约定,(将其分成多行):
BOOL result = [<classObject> testMethodWithLargeString:string1
smallString:string2];
我是否必须包含一些库才能使用字符串类型?
不,你不必使用任何像 string.h 这样的库
在可可基金会框架中,所有这些都包括在内。
示例代码:
-(BOOL) testMethod :(NSString *)largestring :(NSString *)smallstring {
return YES;
}
说明:检查Apple 文档。
采用 :
[self testMethod :yourLargeString :yourSmallString];
我是否必须包含一些库才能使用字符串类型?
NSString.h
在内部声明Foundation.framework
,Xcode
默认情况下,在您创建新框架时将此框架添加到您的项目中(检查框架文件夹内)。因此,您已隐式添加了该库,这就是为什么不需要包含特定NSString
类的原因。你说你想使用字符串作为参数,所以我假设你不想要 C 风格char*
,而是某种字符串类。由于您没有指定任何其他内容,因此在我的示例中,我使用std::string
的是 C++ 标准库。
这是您的方法在 Objective-C 语法中的样子:
#import <string>
- (BOOL) testMethodWithLargeString:(const std::string&)largeString smallString:(const std::string&)smallString
{
return YES;
}
一些注意事项:
.mm
. 扩展名告诉编译器该文件包含混合的 C++ 和 Objective-C 代码std::string
来自 C++ 标准库,但我相信您不必做任何特别的事情来使您的项目链接到该库。BOOL
(大写)还是bool
(小写)作为返回类型。BOOL
是传统的 Objective-C 布尔类型,而bool
是传统的 C++ 原始布尔类型。WithBOOL
你必须使用YES
andNO
作为返回值,而 withbool
你必须使用true
and false
。你不应该尝试混合这两种类型和它们的值,它不会让编译器高兴(如果你使用强制转换来强制编译器接受混合,迟早你会不高兴)const std::string&
作为in
参数的类型。这const
将使您免于意外更改参数的内容。如果您只使用std::string&
(不使用const
),则参数将成为out
参数。我还建议您不要使用指针(即const std::string*
or std::string*
),因为std::string
它是一种值类型(如果不熟悉,请阅读该主题),因此通常与引用结合使用。最后但并非最不重要的一点:永远不要使用(std::string
即没有&
[reference] 或*
[pointer])——如果你这样做了,每次调用该方法时都会创建一个字符串的副本。如果您已经知道所有这些事情,那么您当然可以忽略我的建议 :-)Maxthon Chan 的回答还提供了有用的提示,说明在混合 C++ 和 Objective-C 时需要考虑什么。