首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSAppleEventDescriptor到NSArray

NSAppleEventDescriptor到NSArray
EN

Stack Overflow用户
提问于 2015-11-30 06:14:20
回答 2查看 1K关注 0票数 4

我正在尝试创建一个NSArray,其中包含来自NSAppleEventDescriptor的列表值。几年前就有一个similar question被问到了,尽管这个解决方案返回一个NSString

代码语言:javascript
复制
NSString *src = [NSString stringWithFormat: @"return {\"foo\", \"bar\", \"baz\"}\n"];
NSAppleScript *exe = [[NSAppleScript alloc] initWithSource:src];
NSAppleEventDescriptor *desc = [exe executeAndReturnError:nil];

NSLog(@"%@", desc);

// <NSAppleEventDescriptor: [ 'utxt'("foo"), 'utxt'("bar"), 'utxt'("baz") ]>

我不确定需要哪个描述符函数来将值解析为数组。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-30 07:40:53

必须强制将返回的事件描述符强制为列表描述符。

然后,您可以获得一个重复循环的值。

代码语言:javascript
复制
NSString *src = [NSString stringWithFormat: @"return {\"foo\", \"bar\", \"baz\"}\n"];
NSAppleScript *exe = [[NSAppleScript alloc] initWithSource:src];
NSAppleEventDescriptor *desc = [exe executeAndReturnError:nil];
NSAppleEventDescriptor *listDescriptor = [desc coerceToDescriptorType:typeAEList];
NSMutableArray *result = [[NSMutableArray alloc] init];
for (NSInteger i = 1; i <= [listDescriptor numberOfItems]; ++i) {
    NSAppleEventDescriptor *stringDescriptor = [listDescriptor descriptorAtIndex:i];
    [result addObject: stringDescriptor.stringValue];
}
NSLog(@"%@", result);
票数 5
EN

Stack Overflow用户

发布于 2019-08-14 22:30:14

我写了一个扩展来让这更容易。

请注意,atIndex() / descriptorAtIndex:有一个基于一个的索引。

代码语言:javascript
复制
extension NSAppleEventDescriptor {

    func listItems() -> [NSAppleEventDescriptor]? {
        guard descriptorType == typeAEList else {
            return nil
        }

        guard numberOfItems > 0 else {
            return []
        }

        return Array(1...numberOfItems).compactMap({ atIndex($0) })
    }

}

如有任何改进,请评论或编辑!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33992462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档