gpt4 book ai didi

ios - 从 Objective C 中的函数返回函数?

转载 作者:行者123 更新时间:2023-11-28 15:57:44 25 4
gpt4 key购买 nike

我在我的 objective c 项目中使用这个 swift 函数来解析 JSON,这个函数看起来像这样:(这个函数在 NetworkService 类中)

static func parseJSONString(jsonString: String?, key: String?) -> () -> String{
var jsonSubString = String()
func parseString() -> String{
if let data = jsonString?.data(using: .utf8){
if let content = try? JSONSerialization.jsonObject(with: data, options: []),
let array = content as? [[String: AnyObject]]
{

for jsondict in array {
jsonSubString = jsondict[key!] as! String
}
}
}
return jsonSubString
}
return parseString
}

我想在 Objective C 的 ViewController 中调用这个函数。它是一个静态方法。请帮我调用这个函数。

最佳答案

您必须将函数公开给 Objective-C。

如果你的类还没有暴露给 Objective-C,你必须用 @objc 指令标记它并从 NSObject 继承,就像这样:

@objc class NetworkService: NSObject {

static func parseJSONString(jsonString: String?, key: String?) -> () -> String{
var jsonSubString = String()
func parseString() -> String{
if let data = jsonString?.data(using: .utf8){
if let content = try? JSONSerialization.jsonObject(with: data, options: []),
let array = content as? [[String: AnyObject]]
{

for jsondict in array {
jsonSubString = jsondict[key!] as! String
}
}
}
return jsonSubString
}
return parseString
}
}

然后在 Objective-C 中包含 swift 生成的 header (我建议将其包含在 .m 文件中),通常命名为 [your-product-name-here]-Swift.h

您现在应该能够像这样从 Objective-C 调用您的函数:

NSString* (^parseJson)(void) = [NetworkService parseJSONStringWithJsonString:@"SomeString" key:@"SomeOtherString"];
NSString* result = parseJson();

或者像这样:

NSString* otherResult = [NetworkService parseJSONStringWithJsonString:@"SomeString"
key:@"SomeOtherString"]();

有关此内容的更多信息,请参阅 Apple 的文档 here

关于ios - 从 Objective C 中的函数返回函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41478533/

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