首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法在NSArray,NSMutableArray等上强制输入?

在Objective-C中,可以使用协议(Protocol)来强制输入。协议定义了一组方法和属性,可以让某个类遵循这个协议,从而实现强制输入。

例如,可以定义一个协议,让NSArray和NSMutableArray遵循这个协议,并实现强制输入的功能。

代码语言:objective-c
复制
@protocol MyArrayProtocol <NSObject>
- (void)addObject:(id)object;
- (id)objectAtIndex:(NSUInteger)index;
@end

@interface MyArray : NSObject <MyArrayProtocol>
@property (nonatomic, strong) NSMutableArray *array;
- (void)addObject:(id)object;
- (id)objectAtIndex:(NSUInteger)index;
@end

@implementation MyArray
- (instancetype)init {
    self = [super init];
    if (self) {
        _array = [NSMutableArray new];
    }
    return self;
}

- (void)addObject:(id)object {
    [_array addObject:object];
}

- (id)objectAtIndex:(NSUInteger)index {
    return [_array objectAtIndex:index];
}
@end

在上面的代码中,我们定义了一个MyArrayProtocol协议,并让MyArray类遵循这个协议。MyArray类中实现了addObject和objectAtIndex方法,并在init方法中初始化了一个NSMutableArray对象。

这样,我们就可以使用MyArray类来强制输入NSArray和NSMutableArray了。

代码语言:objective-c
复制
MyArray *array = [MyArray new];
[array addObject:@"Hello"];
id object = [array objectAtIndex:0];

需要注意的是,这种方法只能在Objective-C中使用,而且需要手动实现协议中的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS 二级菜单(UITableView实现)「建议收藏」

retain) UILabel * Name; @property (nonatomic,retain) UILabel * Comments; @property (nonatomic,strong) NSArray...addSubview:_Comments];//将控件插入uitablviewecell _Open=false;//默认子控件是关闭的 } return self; } @end ....中拖一个uiviewtable的控件;并且与设置属性 就是下面的TableView 并建立关联 或许我只是贴出代码来并不那么容易理解; 下面我说一下大体的思路吧; 当选中cell的时候看看这个cell有没有子菜单...,如果没有很简单直接打开就行了; 如果有那么我们先将这些子菜单想办法添加到掌管父菜单的数组中,然后生成一个位置数组(为了tableview中调用 insertRowsAtIndexPaths: withRowAnimation...;//中间处理过程数组,用于插入子视图 @property (nonatomic,strong) NSMutableArray * DeleteArry;//中间处理过程数组,用于删除子视图 -(NSArray

1.2K30

iOS开发·runtime+KVC实现多层字典模型转换(多层数据:模型嵌套模型,模型嵌套数组,数组嵌套模型)

更重要的是,有时候iOS面试的时候,部分面试官会不仅问你某种场景会用到什么框架,更会问你如果要你来实现这个功能,你有没有解决思路?所以,自己实现字典转模型还是有必要掌握的。...有了这个基础,利用运行时runtime的动态特性,你也可以实现这些第三方框架。...解决办法是实现下面的方法: //空的方法体也行 - (void)setValue:(id)value forUndefinedKey:(NSString *)key{} 需求:有一个排名列表页面,这个页面的每个排名对应一个模型...*dictArr = [NSArray arrayWithContentsOfFile:path]; //字典转模型 NSMutableArray *modelArr = [NSMutableArray...*dictArr = statusDict[@"statuses"]; NSMutableArray *statusArr = [NSMutableArray array]; //

2.5K10
  • iOS开发·必会的算法操作:字符串数组排序+模型对象数组排序

    传送门:排序算法演示小DEMO 前面的话 为了给字符串数组排序,除了用C/C++的基本办法,iOS开发者更应该学会利用苹果专门为NSArray 排序提供的sortedArrayUsingComparator...国内汉字输入输入的汉字为全角,字母数字为半角,但是标点则默认为全角,可切换为半角(可以通过输入法工具条上的相应按钮来切换标点符号的全角半角状态)。 日文里面的有汉字,也有片假字。...2.2.6 综合应用 一个比较多的应用示例是,区分字母大小写,区分数值大小,区分半角全角,并强制性指定区分unicode不一样的字符。...花样玩法:例题 ---- OC的高级用法中,经常需要查看系统类或者某个自定义类中的私有属性以及私有成员变量,并通过KVC的办法强制修改这些私有成员变量的值,以取代系统或者自定义类中的默认设置。...所以,如果你懒得创建一些假数据的数组,可以想到运用运行时的办法获取成员变量的数组,并进行排序操作训练。 题1.

    2.1K10

    iOS开发之__NSArray0、__NSArrayI、__NSArrayM和__NSPlaceholderArray

    unrecognized selector sent to instance XXX,大部分情况下是因为对象被提前release了,在你心里不希望他release的情况下,指针还在,对象已经不在了,网上有好多的解决办法...例如NSArray与其可变版本NSMutableArray。这样看来实际上有两个抽象基类,一个用于不可变数组,一个用于可变数组。尽管具备公共接口的类有两个,但任然可以合起来算一个类族。...使用NSArray的alloc方法来获取实例的时候,该方法会首先分配一个属于某类的实例,此实例充当“占位数组”(placeholder array)。...__NSPlacehodlerArray 为了验证,我们把将原有的alloc+init拆开写: id arr1 = [NSArray alloc]; id arr2 = [NSMutableArray...所以总结一下就是:__NSArrayI是NSArray的真正类型 ,__NSArrayM是NSMutableArray真正类型。

    3K80

    iOS音视频接入 - TRTC多人音视频通话

    当调用发起多人语音邀请后,先判断了当前是否通话中,如果没有通话中,则记录当前通话的邀请者、通话类型、群组ID、设置当前为通话中后组装进房参数。...自己进入房间后,更新新添加的邀请人,并发起通话邀请(此内部实现逻辑可根据自己需求实现)。...*newInviteList = [NSMutableArray array]; for (NSString *userID in userIDs) { if (!...** * IMSDK方法 * 接收方接受邀请 * @note 不能接受不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己...最终调用IMSDK的 /** * 接收方拒绝邀请 * * @note 不能拒绝不是针对自己的邀请,请在收到 onReceiveNewInvitation 回调的时候先判断 inviteeList 有没有自己

    3.8K1811

    编码篇-精析OC史诗级技术之KVC

    不得不承认KVC开发过程中是神器一般的存在。如果正确灵活使用kvc,会使得整个开发过程轻松很多。简单而强大。...- (NSMutableArray *)mutableArrayValueForKey:(NSString *)key; //这是集合操作的API,里面还有一系列这样的API,如果属性是一个NSMutableArray... *)dictionaryWithValuesForKeys:(NSArray *)keys; //输入一组key,返回该组key对应的Value...setValue:forKey:方法:给模型的属性赋值 赋值原理:(以 setIcon为例:) (1)去模型中查找有没有setIcon方法,就直接调用这个set方法,给模型这个属性赋值[self...看了系统自带的API,无法解决这个问题,现在有两个路: 自定义PageControl 通过runtime遍历出UIPageControl所有属性(包括私有成员属性)利用KVC可强制修改系统的PageControl

    1.3K20

    iOS - 关于 KVC 的一些总结

    非对象值处理 KVC支持基础数据类型和结构体,使用KVC进行赋值或取值的时候,会自动非对象值和对象值之间进行转换。...基本的 Getter 搜索模式 以下是valueForKey:方法的默认实现,给定一个key作为输入参数,消息接受者类中操作,执行以下过程。...基本的 Setter 搜索模式 以下是setValue:forKey:方法的默认实现,给定key和value作为输入参数,尝试将KVC调用方的属性名为key的值设置为value,执行以下过程。...NSMutableArray 搜索模式 以下是mutableArrayValueForKey:方法的默认实现,给定一个key作为输入参数,返回属性名为key的集合的代理对象(这里指NSMutableArray...如果找到就返回一个代理对象,该代理对象将接收所有NSMutableArray消息,通常是NSMutableArray或其子类。否则执行④。

    1.9K10

    WebViewJavascriptBridge优化开发背景处理办法

    背景 WebViewJavascriptBridge作为JS和原生OC的交互,通常都是WebView中用self.bridge注册方法来进行调用,但这样对于WebView来说比较脓肿,全部逻辑处理都放在...WebView下面实现,并且入参出参都是要用字符串来实现影响开发效率,后来考虑用runtime方法,让JS调用的方法都放在类里面实现 处理办法 批量注册方法 创建一个handler类,用来批量注册JS方法...NSDictionary* infoDic;//入参 @property (nonatomic,strong)JSResponseCallback jsResponseCallback;//回参 -(NSArray...numClasses; Class * classes = NULL; numClasses = objc_getClassList(NULL, 0); //类:方法 NSMutableArray...* methodListArr = [NSMutableArray array]; if (numClasses>0) { classes = (__unsafe_unretained

    62310

    让你在WebView中用JS调Native Object

    要想获得一个对象上所有的方法,可以通过下面这段代码来获得: NSArray* DumpObjMethods(Class clz){ Class thisClass = clz; NSMutableArray...*ret = [[NSMutableArray alloc]init]; do { unsigned int methodCount = 0; Method *methods...我最开始是想看看在JS中有没有办法实现像forwardinvocation这样的东西,如果有的话我就可以根本不需要提前去注入了,只需要调用的时候去查找就好了。...调用过程: 注入相对来说比较简单,无非就是JS中创建一个对象,然后将方法名写进去,重点是调用,比如我本地有这样的一个方法- (void)passArrayFromJS:(NSArray*)arr,JS...由于我是依赖的UIWebView,没有用JavascriptCore这样高大上的东西,所以答案我的答案是没有办法

    2.4K30

    【IOS开发高级系列】MVVM—ReactiveCocoa架构设计专题(一)

    作为替代,我个人喜欢使用ReactiveCocoa,但MVVM并未强制我们使用ReactiveCocoa。MVVM是一个伟大的典范,它自身独立,只是在有一个良好的绑定框架时做得更好。...(1) 高阶函数:函数式编程中,把函数当参数来回传递,而这个,说成术语,我们把他叫做高阶函数。oc中,blocks是被广泛使⽤用的参数传递,它实际上是匿名函数。         ...高阶函数调用过程有点像linux命令⾥里的pipeline(管道),一个命令调用后的输出当作另一个命令输入,多个命令之间可以串起来操作。...比如说,一种命令式编程语言中,a: = b + c 表示 a 是 b + c 表达式的值,但是RP语言中,它可能意味着一个动态的数据流关系:当c或者b的值发生变化时,a的值自动的发生变化。         ...,但是每个函数可以接收一个输入值的流,如果其中,一个新的输入值到达的话,这个函数将根据最新的输入值重新计算,并且产⽣生一个新的输出。

    48630

    iOS底层学习——KVC上篇

    官方文档中有相关的说明,见下图: 翻译过来的意思是: setValue:forKey: 的默认实现,给定key和value参数作为输入,尝试将名为key的属性设置为value,接收调用的对象内部,...如果找到,则使用输入值(或根据需要展开的值)调用它并完成。...如果找到,直接使用输入值(或解包值)设置变量并完成。未找到访问器或实例变量时,调用 setValue:forUndefinedKey:。...如果返回YES,KVC机制会优先搜索该类里面有没有名为_的成员变量,无论该变量是类接口处定义,还是类实现处定义。...那么就会返回一个可以响应NSArray。 所有方法的代理集合(NSKeyValueArray,是NSArray的子类),调用这个代理集合的方法,或者说给这个代理集合发送属于NSArray的方法。

    43830
    领券