美文网首页
Objective-C 使用下标访问自定义类型的属性

Objective-C 使用下标访问自定义类型的属性

作者: Don_He | 来源:发表于2019-04-03 18:09 被阅读0次

Objective-C 使用下标访问自定义类型的属性

OC容器类

在Objective-C中,可以通过下标来访问数组中的元素,如果数组是NSMutableArray类型的可变数组,则还可以通过下标来对数组中的元素进行赋值操作。例如:

NSMutableArray<NSString *> *array = [[NSMutableArray<NSString *> alloc] init];

array[0] = @"Hello world";

NSString *string = array[0];

对于Objective-C中的字典对象,可以通过键值下标的方式来进行访问,例如:

NSMutableDictionary<NSString *, NSString *> *dictionary = [[NSMutableDictionary<NSString *, NSString *> alloc] init];

dictionary[@"key"] = @"value";

自定义下标访问类

如果要像NSMutableArray和NSMutableDictionary那样访问属性,主要需要实现4个方法,如下:

- (id)objectAtIndexedSubscript:(NSUInteger)index; // object = array[index];


- (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index; // array[index] = object;

- (id)objectForKeyedSubscript:(NSString *)key; // id value = dictionary[@"key"];

- (void)setObject:(id)object forKeyedSubscript:(NSString *)key; // dictionary[@"key"] = value;

举个例子:

// MyObject.h
@interface MyObject : NSObject

- (id)objectAtIndexedSubscript:(NSUInteger)index;

- (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index;

- (id)objectForKeyedSubscript:(NSString *)key;

- (void)setObject:(id)object forKeyedSubscript:(NSString *)key;

@end
#import "MyObject.h"

@interface MyObject ()

@property(nonatomic, strong) NSString *object0;

@property(nonatomic, strong) NSString *object1;

@property(nonatomic, strong) NSString *object;

@end

@implementation MyObject

- (id)objectAtIndexedSubscript:(NSUInteger)index {
    return [self valueForKey:[NSString stringWithFormat:@"object%lu", (unsigned long)index]];
}

- (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index {
    [self setValue:object forKey:[NSString stringWithFormat:@"object%lu", (unsigned long)index]];
}

- (id)objectForKeyedSubscript:(NSString *)key {
    return [self valueForKey:key];
}

- (void)setObject:(id)object forKeyedSubscript:(NSString *)key {
    [self setValue:object forKey:key];
}

@end

必须在头文件中声明这4个方法,才能为当前类型添加下标访问的语法糖。


error.png

以上为头文件没有声明方法的报错。

总结

这个特性一般来说用不上,并且相对Swift的Subscripts来说显得功能性比较弱,大家可以结合项目需要使用。如果有比较不错的使用场景,欢迎赐教。

相关文章

  • Objective-C 使用下标访问自定义类型的属性

    Objective-C 使用下标访问自定义类型的属性 OC容器类 在Objective-C中,可以通过下标来访问数...

  • Swift Tour Learn (十三) -- Swift 语

    本章将会介绍 模块和源文件访问级别访问控制语法自定义类型子类常量、变量、属性、下标构造器协议扩展泛型类型别名位运算...

  • Swift 自定义下标

    Swift 是允许我们自定义下标的。这不仅包含了对自己写的类型进行下标自定义,也包括了对那些已经支持下标访问的类型...

  • 第16章:可选链接

      可选链接是通过可选类型访问属性、方法、下标的过程。如果可选类型是nil则访问失败,如果有真实的值访问成功。多个...

  • avaScript高级程序设计第6章6.1

    1. 最简单的创建自定义对象 使用字面量设计 2. 属性类型:数据属性和访问器属性 数据属性: 内部值:规范将他们...

  • 27.访问控制

    可以明确地给单个类型(类、结构体、枚举)设置访问级别,也可以给这些类型的属性、方法、构造器、下标等设置访问级别。协...

  • Kotlin与Java混合开发(3)✔️Java调用Kotlin

    访问 Kotlin 属性访问包级别成员使用 文件名 访问使用 @file:JvmName("自定义名") 访问实例...

  • 第12章:下标

      下标操作符在许多语言中都用于数组元素的访问,在Objective-C中下标还用于字典的访问,在Swift中下标...

  • JS示例08-选项卡

    一、知识要点 1、自定义下标属性2、综合使用getElementsByTagName 二、源码参考 三、运行效果

  • Swift中类与结构体

    相同点 定义存储值的属性 定义方法 定义下标以使用下标语法提供对其值的访问 定义初始化器 使用 extension...

网友评论

      本文标题:Objective-C 使用下标访问自定义类型的属性

      本文链接:https://www.haomeiwen.com/subject/vpzzbqtx.html