首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我自己的@{}字面量

我自己的@{}字面量
EN

Stack Overflow用户
提问于 2013-07-18 16:49:50
回答 2查看 459关注 0票数 2

如你所知,苹果已经为NSNumber,NSDictionary,NSArray等类提供了@文字,所以我们可以这样创建一个对象,例如

代码语言:javascript
复制
NSArray *array = @[obj1, obj2];

所以我想知道,是否有一种方法可以为我自己的类创建这样的文字?例如,我想编写smth。喜欢

代码语言:javascript
复制
MyClass *object = MyClass[value1, value2];

我不想写很长的解析器:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-18 16:56:32

Clang编译器的特点是@语法是字面量。因为它的编译器特性,NO,你不能定义你自己的文字。

有关编译器文字的更多信息,请参阅Clang 3.4 documentation - Objective-C Literals

编辑:另外,我发现this很有趣,所以讨论一下

编辑:正如BooRanger在评论中提到的,存在创建[]访问器( Collection Literals方式)来访问自定义对象的方法。它被称为Object Subscripting。使用它,您可以访问自定义类中的任何内容,如下面的myObject[@"someKey"]。请访问NSHipster了解更多信息。

这是我的"Subcriptable“对象的示例实现。为了简单起见,它只访问内部字典。标题:

代码语言:javascript
复制
@interface LKSubscriptableObject : NSObject

//  Object subscripting
- (id)objectForKeyedSubscript:(id <NSCopying>)key;
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;

@end

实施:

代码语言:javascript
复制
@implementation LKSubscriptableObject {

    NSMutableDictionary     *_dictionary;
}

- (id)init
{
    self = [super init];
    if (self) {
        _dictionary = [NSMutableDictionary dictionary];
    }
    return self;
}

- (id)objectForKeyedSubscript:(id <NSCopying>)key
{
    return _dictionary[key];
}

- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key
{
    _dictionary[key] = obj;
}

@end

然后,您只需使用方括号即可访问此对象中的任何内容:

代码语言:javascript
复制
LKSubscriptableObject *subsObj = [[LKSubscriptableObject alloc] init];

subsObj[@"string"] = @"Value 1";
subsObj[@"number"] = @2;
subsObj[@"array"] = @[@"Arr1", @"Arr2", @"Arr3"];

NSLog(@"String: %@", subsObj[@"string"]);
NSLog(@"Number: %@", subsObj[@"number"]);
NSLog(@"Array: %@", subsObj[@"array"]);
票数 2
EN

Stack Overflow用户

发布于 2015-07-17 17:29:46

你对这个语法没意见吗?

代码语言:javascript
复制
MyClass *object = MyClass(value1, value2);

只需像这样定义宏:

代码语言:javascript
复制
#define MyClass(objects...) [[MyClass alloc] initWithObjects: @[objects]];

编译器将允许命名为MyClass MyClass()宏的类。

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

https://stackoverflow.com/questions/17718790

复制
相关文章

相似问题

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