【问题标题】:How do I define a variable with user entered data within the implementation?如何在实现中使用用户输入的数据定义变量?
【发布时间】:2013-11-07 01:03:28
【问题描述】:

我希望这是有道理的。我正在尝试将半径定义为用户输入的内容。我该怎么做?

#import "circle.h"

@implementation circle

-(double) radius {
    double radius = 
}

-(double) pi {
    double pi = 3.14159;
    return pi;
}

@synthesize setRadius, getRadius;

-(double) getArea {
    double area = pi * radius * radius;
    return area;
}

-(double) getDiameter {
    double diameter = 2 * radius;
    return diameter;
}

-(double) getCircumcerence {
    double circumference = 2 * pi * radius;
    return circumference;
}
@end

这是一个什么都没有的句子,所以它会让我发布我的问题,因为它主要不是代码。

【问题讨论】:

  • 抱歉你的问题和代码对我没有意义
  • myck,您应该多花点时间查看上一个问题的答案。如果您有任何问题,请对其中一个答案发表评论。您有两个非常好的示例,说明如何在 Objective C 中为这个确切的类设置类。我不确定您不清楚什么,但是如果您可以在此处发表评论以说明不清楚的地方,我会很高兴为您提供帮助。此外...您甚至还没有接受上一个问题的完美答案之一...
  • 感谢 nhgrif 和 @bladebunny.. 抱歉,如果这篇文章是多余的。我来问一个简单的问题,最终我的代码还有很多其他问题需要解决。我感到非常不知所措。但再次感谢大家。
  • @myck 我们都必须在某个时候学习。不要被推迟。我认为我们/我有点偏离了方向,但你应该有你的答案。如建议的那样,如果事情看起来仍然令人困惑,我强烈建议您获取并阅读 Big Nerd Ranch iOS 编程指南(如果您还没有的话)。它写得很好,透彻且易于理解。并且在先前的经验方面不会假设太多。 bignerdranch.com/book/…

标签: objective-c implementation


【解决方案1】:

将此作为方法添加到您的 circle 类中:

-(void)setRadius:(double)input {
    radius = input;
}

假设您没有使用我强烈推荐的@properties(并在回答您的其他问题时提供了一个示例),这就是您在Objective-C 中正确创建setter 的方法。 radius 需要声明为类的变量,在这个方法之外,以便你的其他方法调用它,例如getCircumference 等。


要创建私有实例变量,您需要将其添加到 @implementation 行的末尾:

@implementation circle {
    double radius;
}

但同样,这样做假设您没有走@properties 的路线,我再次强烈推荐。


要从 main 中使用它:

circle *myCircle = [[circle alloc] init];
[circle setRadius:1.0];  //the radius is now 1.0
double newRadius = 27.0;
[circle setRadius:newRadius];  //now the radius is 27.0

【讨论】:

  • @BryanChen 自从您发表评论以来,我已经编辑过一次或两次。如果您认为这个解释不够充分,您将不得不详细说明我没有完全解释的内容。
  • @Bladebunny Bryan 没有问最初的问题。
【解决方案2】:

更新我的答案,因为我误读了原始问题。让我说明一下我假设您正在尝试做的事情:

在Objective C 类上设置一个名为“radius”的属性的值。 接口(标题)应该有这样的:

  @property (nonatomic, assign) double radius; 

您正在合成属性,我会假设您想要/需要这样做。但是你的语法是错误的。应该是:

    @synthesize radius;

实例变量,默认为:_radius

所以,你的二传手是:

- (void)setRadius:(double)radius
{
   _radius = radius;
}

getter 可能如下所示:

-(double)radius
{
    return _radius;
}

您可以根据需要在@synthesize 语句中设置不同的支持变量,默认情况下您将获得_radius

请记住,除非您在 setter 和 getter 中有一些自定义逻辑,否则您根本不需要定义这些方法。默认情况下,您甚至不需要合成属性。编译器会处理所有这些。

更多信息: http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html

【讨论】:

  • 你想做什么?
  • 谢谢@bladebunny! radiusWithInput 是新方法吗?
  • 编辑后的答案现在明显更好,因此不相关的 cmets 已被删除。作为历史记录,您和我的答案中的所有内容都已被完整详细地涵盖,作为该用户提出的上一个问题的答案。上一题我走的是@properties的路线……所以这次我换了一条路……
  • 对不起。谢谢。关于不要太快扣动扳机的教训。并感谢您的清理。没有意识到有一个“交叉帖子”。干杯。
猜你喜欢
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多