Setter必须有一个参数

Bra*_*ner 1 objective-c

我写了一个没有按预期工作的setter.我正在读取文件中的统计信息,并使用这些统计信息填充SVTeam对象的属性.但是,需要计算某些属性(因为它们未在文件中提供).其中一个属性保留了特定团队的主场胜率.我不需要为setter提供参数.两个问题:

  1. 因为我不是在我的二传手中提供一个参数,所以它仍然是一个客观c意义上的制定者吗?
  2. 即使它不是一个真正的setter为什么下面的代码仍然留下属性null

SVTeam.h

@interface SVTeam : NSObject
@property (weak, nonatomic) NSNumber *homePercentage;
...
...
Run Code Online (Sandbox Code Playgroud)

SVTeam.m

#import "SVTeam.h"
@implementation SVTeam
@synthesize homePercentage = _homePercentage;
...
...

-(void) setHomePercentage
{
    float wins = [_homeWins floatValue];
    float losses = [_homeLosses floatValue];
    float ties = [_homeTies floatValue];
    float winPercentage = wins / (wins+losses+ties);
    self.homePercentage = [NSNumber numberWithFloat:winPercentage];
}
Run Code Online (Sandbox Code Playgroud)

Gar*_*d81 7

由于homePercentage是基于其他属性的计算值,因此您可以将其设置为只读属性,而您将在getter中使用计算逻辑.如果您将其保留为setter,那么您的消费者必须首先确保调用setter并调用getter来检索该值.

@property(nonatomic,readonly) NSNumber *homePercentage;
Run Code Online (Sandbox Code Playgroud)

你的getter定义是

- (NSNumber *)homePercentage
{
  ...
  return [NSNumber numberWithFloat:winPercentage];
}
Run Code Online (Sandbox Code Playgroud)