您似乎在这里有(至少)两个相关但独立的问题。
1/ 如何创建一个数字数组
Objective-C 数组以不可变 NSArray(固定内容)或可变 NSMutableArray(您可以添加删除和随机播放内容)的形式出现。你写的排序函数要求一个可变数组。
使用NSNumber 对象创建和填充不可变数组:
NSArray* array = @[@3,@5,@8,@2,@9,@1]; //"@1" is an NSNumber object literal
//access: array[3] etc
多维:
NSArray* arrayOfArrays @[@[@3,@5,@8],@[@2,@9,@1]];
//access: arrayOfArrays[1][2] etc
创建一个空的可变长度可变数组
NSMutableArray* mutableArray = [[NSMutableArray alloc] init];
创建并填充可变长度的可变数组
myArray = [NSMutableArray arrayWithObjects:@3,@5,@8,@2,@9,@1, nil]; //note nil termination
将不可变的 NSArray 变成可变的 NSMutableArray
NSMutableArray* mutableArray = [array mutableCopy];
(但请注意,这只会将顶层呈现为可变的,如果它包含不可变的子数组,它们将保持不可变)
Objective-C 集合(NSArray、NSDictionary、NSSet)只能保存 Objective-C 对象。因此,如果要存储int
s 或float
s,则需要在添加到集合之前将它们装箱到 Objective-C NSNumber 对象中,然后再次将它们拆箱以访问该值。
int x;
float y;
NSNumber xNum = [NSNumber numberWithInt:x]; //box
NSNumber yNum = [NSNumber numberWithFloat:y]; //box
x = [xNum intValue]; //unbox
y = [yNum floatValue]; //unbox
2/ 如何翻译代码
这是一个类似的翻译:
要创建(可变) myArray 对象:
NSMutableArray* myArray = [[NSMutableArray alloc] init];
Populate it:
[myArray addObjects:@3,@6,@8,@1,@9,nil]; //last value is nil to indicate termination
方法:
- sortArray:(NSMutableArray*)myArray
{
id tmp;
for (int x = 0; x < [myArray count]; x++) {
for (int y = x+1; y < 6; y++) {
if ([myArray[y] floatValue] < [myArray[x] floatValue]) {
tmp = myArray[x];
myArray[x] = myArray[y];
myArray[y] = tmp;
}
}
}
}
致电:
[self sortArray:myArray];
要使用对象范围声明,请在 @interface 部分中创建一个属性
@interface myObject:NSObject
@property (nonatomic, strong) NSMutableArray* myArray;
@end
您仍然需要创建 myArray 才能使用它:
self.myArray = [[NSMutableArray alloc] init];
但是您将能够从对象内部的任何位置设置和访问它的值,因此:
self.myArray
并且 - 如果它在公共头文件 @interface 部分中 - 从对象外部:
myObject.myArray