目标 c / 如何将用户实现的静态函数调用到 nsstring 类中?

Objective c / How do I call a user-implemented static function into the nsstring class?

提问人:timothy 提问时间:4/8/2021 最后编辑:Willeketimothy 更新时间:4/8/2021 访问量:74

问:

+ (NSString *)dictionaryToJson:(NSDictionary *)dic
{
    NSString *result = @"";
    NSError *err;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&err];
    
    if(! jsonData) {
        NSLog(@"Error: %@", err);
    } else {
        NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        result = jsonString;
    }
    
    return result;
}

我们在这里定义的函数是

[body appendData:[[NSString dictionaryToJson:jsonBody] dataUsingEncoding:NSUTF8StringEncoding]];

我认为您还不理解 objc 的函数调用。请帮帮我。

objective-c nsstring 静态方法

评论


答:

1赞 skaak 4/8/2021 #1

在这里,您通常会使用类别来扩展类。例如,参见 https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html

// Header file
// Something like NSString+JSONAdditions.h
@interface NSString (JSONAdditions)

+ (NSString *)dictionaryToJson:(NSDictionary *)dic;

@end

// Implementation file
// Something like NSString+JSONAdditions.m
@implementation NSString (JSONAdditions)

+ (NSString *)dictionaryToJson:(NSDictionary *)dic
{
    NSString *result = @"";
    NSError *err;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&err];

    if(! jsonData) {
        NSLog(@"Error: %@", err);
    } else {
        NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        result = jsonString;
    }

    return result;
}

@end

现在,您可以按照提供的代码片段使用代码。Xcode 中的 FWIW 使用

文件 -> 新建 -> 文件 ... -> Objective-C 文件

评论

0赞 timothy 4/9/2021
感谢您的友好回复。多亏了你,我绝对能理解。显然,@interface类别是独一无二的。