gpt4 book ai didi

objective-c - 在 Objective-C 中,我可以在 c float 组上声明 @property 吗?

转载 作者:行者123 更新时间:2023-12-03 07:11:18 25 4
gpt4 key购买 nike

东西.h

@interface Thing : NSObject 
{
float stuff[30];
}

@property float stuff;
@end

东西.m

@implementation Thing
@synthesize stuff;
@end

我收到错误:属性“stuff”的类型与 ivar“stuff”的类型不匹配

我不想使用 NSArray,因为我必须将 float 转换为 NSNumber(对吗?),这做数学很痛苦。

更新:我注意到类似的答案有猜测和试验答案。虽然我很欣赏非 Objective-C 人员的尝试,但无论是否可能,我都希望得到一个明确的答案。

最佳答案

好的,我已经编译了以下代码,它按预期工作。

FloatHolder.h

@interface FloatHolder : NSObject {
int _count;
float* _values;
}

- (id) initWithCount:(int)count;

// possibly look into this for making access shorter
// http://vgable.com/blog/2009/05/15/concise-nsdictionary-and-nsarray-lookup/
- (float)getValueAtIndex:(int)index;
- (void)setValue:(float)value atIndex:(int)index;

@property(readonly) int count;
@property(readonly) float* values; // allows direct unsafe access to the values

@end

FloatHolder.m

#import "FloatHolder.h"


@implementation FloatHolder

@synthesize count = _count;
@synthesize values = _values;

- (id) initWithCount:(int)count {
self = [super init];
if (self != nil) {
_count = count;
_values = malloc(sizeof(float)*count);
}
return self;
}

- (void) dealloc
{
free(_values);

[super dealloc];
}

- (float)getValueAtIndex:(int)index {
if(index<0 || index>=_count) {
@throw [NSException exceptionWithName: @"Exception" reason: @"Index out of bounds" userInfo: nil];
}

return _values[index];
}

- (void)setValue:(float)value atIndex:(int)index {
if(index<0 || index>=_count) {
@throw [NSException exceptionWithName: @"Exception" reason: @"Index out of bounds" userInfo: nil];
}

_values[index] = value;
}

@end

然后在您的其他应用程序代码中,您可以执行如下操作:

** FloatTestCode.h **

#import <Cocoa/Cocoa.h>
#import "FloatHolder.h"

@interface FloatTestCode : NSObject {
FloatHolder* holder;
}

- (void) doIt:(id)sender;

@end

** FloatTestCode.m **

#import "FloatTestCode.h"


@implementation FloatTestCode

- (id) init
{
self = [super init];
if (self != nil) {
holder = [[[FloatHolder alloc] initWithCount: 10] retain];
}
return self;
}

- (void) dealloc
{
[holder release];

[super dealloc];
}

- (void) doIt:(id)sender {
holder.values[1] = 10;
}

关于objective-c - 在 Objective-C 中,我可以在 c float 组上声明 @property 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/897639/

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