gpt4 book ai didi

ios - 在 Objective-C 中从 NSarray 中获取字符

转载 作者:行者123 更新时间:2023-11-30 18:56:42 25 4
gpt4 key购买 nike

我试图通过生成随机数从 NSArray 中获取字符。这是我的代码

@interface ClassName : NSObject


@property (nonatomic) char letter;


-(id) init;

-(char) changeLetter;

@end

实现文件:

#import "ClassName.h"

@interface ClassName()

@property (strong, nonatomic) NSArray *alphabet;



@end


@implementation ClassName


-(id) init {
[self alphabet];

return self;

}


-(NSArray *) alphabet
{
if (!_alphabet) _alphabet =
@[@'A', @'B',@'C', @'D',@'E', @'F',
@'G', @'H',@'I', @'J',@'K', @'L',
@'M', @'N',@'O', @'P',@'Q', @'R',
@'S', @'T',@'U', @'V',@'W', @'X',
@'Y', @'Z'];




return _alphabet;
}


-(char) changeLetter
{
//Picks a number between 0-26
int nextLetter = arc4random_uniform(26);

//Changes the value of the bubble
[self setValue: nextLetter];


return [self.alphabet objectAtIndex:nextLetter];
}



@end

我遇到的问题是来自changeLetter 的返回语句。它告诉我“不兼容的指针到整数转换从结果类型为‘char’的函数返回‘id’

我不知道问题是什么。我是 Objective-C 的新手,并且已经对此感到非常沮丧。与Java相比,显得如此困难和复杂。

有人可以告诉我我做错了什么吗?

非常感谢任何帮助。

最佳答案

来自 Java 的您可能会感到困惑,因为 Java 支持自动装箱自动拆箱

在 Java 和 Objective-C 中,您无法将非对象类型(例如整数和字符)直接存储在集合(例如数组)中。相反,这些值被存储为对象,这些对象包裹(或盒子)基本值。

在 Objective-C 中,常见的包装器是 NSNumber,它能够存储整数、 float 、字符和 bool 值。还有一个 NSValue 包装器用于存储其他基本值。

Java 将根据上下文自动将基本值包装为对象,并解开对象以生成基本值。在 Objective-C 中,您必须自己执行此操作。

您的表达式:@'A' et al 采用字 rune 字 'A',并将其包装为 NSNumber。在 Java 中,将自动插入 @ 的等效项。

因此,您的数组 _alphabet 包含 NSNumber 的实例。当您使用以下方式访问数组的元素时:

[self.alphabet objectAtIndex:nextLetter]

返回数组中的 NSNumber 实例,您仍然需要将其解包以获取字符,并使用 charValue 方法执行此操作:

[[self.alphabet objectAtIndex:nextLetter] charValue];

Java 再次自动为您执行等效操作。

注意:对于您正在执行的实际任务,有更好的方法来返回随机大写字母,在您的代码中您甚至可以只使用 'A' + nextLetter (记住在 C 中)字符只是整数...)。

HTH

关于ios - 在 Objective-C 中从 NSarray 中获取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23587728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com