gpt4 book ai didi

Objective-C菜鸟 : How to define + call a method in main?

转载 作者:行者123 更新时间:2023-12-03 23:05:30 27 4
gpt4 key购买 nike

我编写了一个在对象内部工作的方法,但现在我想提取它,使其只是一个函数。这是我损坏的命令行工具程序:

#import <Foundation/Foundation.h>

+ (NSMutableString *)reverseString:(NSString *)originalString {
NSMutableString *reversedString = [[NSMutableString alloc] init];

for (NSInteger i = originalString.length; i > 0; i--) {
[reversedString appendFormat:@"%c", [originalString characterAtIndex:i-1]];
}

return reversedString;
}


int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *originalString = @"original string";
NSMutableString *newString = [reverseString:originalString];

NSLog(@"Reversed string: %@", newString);
}
return 0;
}

我的问题是,如何从main()调用reverseString方法?我认为我没有正确定义它。我也必须声明吗?我知道我的方法的内容工作正常,但我不知道如何以允许 main 看到它的方式定义它。

最佳答案

根据定义,“方法”是类的一部分。有两种类型,实例方法和类方法。要调用实例方法,您需要类的实例。要调用类方法,您不需要实例。您可以直接在类上调用它。

相比之下,还有“功能”。您不需要实例或类来调用函数。

所以,听起来你想要一个函数。函数是 Objective-C 从 C 继承的东西。函数的语法与方法的语法不同。使用函数时您的代码可能如下所示:

NSMutableString* reverseString(NSString *originalString) {
NSMutableString *reversedString = [[NSMutableString alloc] init];

for (NSInteger i = originalString.length; i > 0; i--) {
[reversedString appendFormat:@"%c", [originalString characterAtIndex:i-1]];
}

return reversedString;
}


int main(int argc, const char * argv[]) {
@autoreleasepool {
NSString *originalString = @"original string";
NSMutableString *newString = reverseString(originalString);

NSLog(@"Reversed string: %@", newString);
}
return 0;
}

顺便说一句,您的代码无法“正常工作”。您不能通过所谓的“字符”来迭代字符串并将它们视为独立的。 NSString 所谓的“字符”实际上是 UTF-16 代码单元。并非所有 Unicode 字符都可以表示为单个 UTF-16 代码单元。有些需要在所谓的代理对中使用两个代码单元。如果您拆分并反转​​代理对,您将得到无效字符串。

作为一个单独的问题,Unicode 有组合标记。例如,“é”可以表示为 U+0065 拉丁文小写字母 E 后跟 U+0301 组合锐音调。同样,如果您重新排序这些“字符”,重音将与不同的字符组合(或根本无法组合)。

迭代字符串的组合字符序列的正确方法是使用 -[NSString enumerateSubstringsInRange:options:usingBlock:] 方法和 NSStringEnumerationByCompositedCharacterSequences 选项。

关于Objective-C菜鸟 : How to define + call a method in main?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com