【问题标题】:Objective-C iOS6 [ ] operator overloading (const id [])Objective-C iOS6 [] 运算符重载(const id [])
【发布时间】:2012-10-23 10:38:02
【问题描述】:

我知道新的文字和访问器,比如

id obj = [dict objectForKey:@"keyStr"];

等价于

id obj = dict[@"keyStr"];

我注意到主类有一些变化,比如

+ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt;

但什么是 (const id [])?

如何使用 [ ] 运算符创建自己的类

这基本上是运算符重载,我认为这在 ObjectiveC 中是不可能的,是否有可能重载其他运算符,如 +、/、- 等...

操作符重载在 C++ 中是可能的,这是否意味着我可以在 Objective-C++ 类中使用它?

【问题讨论】:

  • 该运算符如何重载?这只是将const id 的数组传递给方法!
  • 虽然这个问题肯定适用于 iOS 6,但它绝不是 iOS 6 特有的。我认为它不应该有 ios6 标签。对象下标,正如 clang 文档中所称的特性,是 Objective-C 的特性,而不是特定的运行时。

标签: ios objective-c operator-overloading


【解决方案1】:

const id [] 只是 const Objective-C 对象的 C 数组。该方法处理从字典文字-@{ @"a": @1 } 构造NSDictionary。这不是你要找的。​​p>

使用something[X] 在对象something 中通过键X 访问对象是下标

如果你希望你的类支持下标,如果你想接受整数,你实现- (id)objectAtIndexedSubscript:(NSUInteger)idx,如果你想接受对象,你实现- (id)objectForKeyedSubscript:(id)key。欲了解更多信息,see the clang ("LLVM compiler") documentation of this feature

setter对应的方法是- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)index- (void)setObject:(id)object forKeyedSubscript:(id<NSCopying>)aKey

【讨论】:

  • 有没有办法让我的班级也不能像 MyClass * c = { @"a": @1 };
  • 不。您可以做的是允许从字典构造并执行[MyClass objectWithDictionary:{ ... }] 并自己提取信息,但它需要更多的工作,不像您将遇到的所有其他对象和类,并且您放弃编译器检查您是否提供正确类型的正确参数。
  • 您应该添加指向相关文档的链接:clang.llvm.org/docs/ObjectiveCLiterals.html
  • @onitake:好主意。完成。
【解决方案2】:

const id []

只是const id数组的类型声明。

就相当于:

const int a[]

对于id 类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多