gpt4 book ai didi

ios - 使用 block 的返回值动态创建字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:02:14 26 4
gpt4 key购买 nike

所以我正在尝试动态构建一个字符串,我真的很希望构建这个字符串的所有代码都存在于作为参数传递给 stringWithFormat 方法的 block 中。以下代码示例应展示我正在努力实现的目标:

    NSString * deviceLanguage = [NSString stringWithFormat:@"Device Language: %@", ^NSString*(void){

NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];

NSString *locale = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];

return [NSString stringWithFormat:@"%@_%@", language, locale];

}];

预期的输出类似于...

Device Language: en_GB

但是,我从这个方法得到的输出实际上返回了 NSGlobalBlock 方法的描述,例如

Device Language: <__NSGlobalBlock__:0x30a35c>

这是因为我没有在字符串中使用正确的占位符,还是没有声明该 block 返回一个 NSString 对象?

最佳答案

那是因为你将 block 本身作为参数传递给 stringWithFormat:,而不是调用 block 的结果:

NSString * deviceLanguage = [NSString stringWithFormat:@"Device Language: %@", ^NSString*(void){

NSLocale *locale = [NSLocale currentLocale];
NSString *language = [locale displayNameForKey:NSLocaleIdentifier
value:[locale localeIdentifier]];
return [NSString stringWithFormat:@"%@_%@", language, locale];

}()];

请注意,您可以使用 "compound statement expression" 获得类似的结果而不是 block :

NSString * deviceLanguage = [NSString stringWithFormat:@"Device Language: %@", ({

NSLocale *locale = [NSLocale currentLocale];
NSString *language = [locale displayNameForKey:NSLocaleIdentifier
value:[locale localeIdentifier]];
[NSString stringWithFormat:@"%@_%@", language, locale];

})];

关于ios - 使用 block 的返回值动态创建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22457916/

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