加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iphone – 返回Nilnteger返回类型的方法

发布时间:2020-12-14 19:48:26 所属栏目:百科 来源:网络整理
导读:我有以下UITableView DataSource方法: - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index 在某些项目(即部分索引标题)上,我只想返回“nothing”,这样表格视图就不会跳到任何部分.
我有以下UITableView DataSource方法:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index

在某些项目(即部分索引标题)上,我只想返回“nothing”,这样表格视图就不会跳到任何部分.我试图返回nil,但是我得到“返回使整数从指针没有转换” – 警告,因为NSInteger显然不是一个对象,只是一个typedef为32/64位整数.

对于特定的部分索引标题,怎样才能得到回报/反应?

解决方法

返回nil是一个错误,因为您返回一个整数原语,而不是一个对象. (你得到一个投射警告,因为nil实际上是一个#define,它评估为((void *)0),这是一个空指针,不是整数零).与Cocoa接口的Objective-C代码的最佳选项可能使用NSNotFound,NSIntegerMax的一个#define,它在Cocoa中用于表示给定值在接收器中不存在等(另一个选项是使用-1,这在C代码中更常见)最好取决于调用代码期望和可以处理的.)

虽然NSNotFound是一个已签名的值,但它足够大,您不太可能遇到范围问题. (NSIntegerMax大约是NSUIntegerMax的一半,很少有人远程接近2,147,483,647个对象 – 更不用说在32位的地方两倍了,64位,忘记了;你的物理内存将在你的机器在您用完索引的整数之前很久.)

说到这个,Cocoa约定是使用NSUInteger(而不是NSInteger)作为索引.无符号整数不能为负,为索引值提供了一些理性保护;除了别的以外,更容易整理意外的整数溢出/下溢.如果这是一个自定义数据源方法(似乎是这样),我强烈建议切换到使用无符号整数. (它可能有助于记住/意识到NSInteger和NSUInteger占用相同数量的字节,它们只是解释不同的位,所以你不会通过切换类型“浪费”任何空间.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读