(Objective-C) 如何调用 Returns 字符串的自定义方法
(Objective-C) How to Call a Custom Method that Returns a String
首先,我会告诉你,我是 Objective-C 的极限初学者。如此之多以至于我在这里问一个关于我目前关注的关于 CodeSchool.com 的在线教程的问题。我在教程中做得很好,但我也在使用 Xcode 命令行工具,在教程中编写我自己的主题版本。
我遇到的问题是调用 return 字符串的自定义方法,例如 NSString *。我的头文件名为 Higgie.h 如下:
#import <Foundation/Foundation.h>
@interface Higgie : NSObject
@property NSString *phoneName;
@property NSString *modelNumber;
-(void)speak;
-(NSString *)speakTwo;
@end
我的实现文件,名为Higgie.m,如下:
#import "Higgie.h"
@implementation Higgie
-(void)speak;
{
NSLog(@"%@ says Hello There!", self.phoneName);
}
-(NSString *) speakTwo; {
NSString *message = [NSString stringWithFormat:@"%@ says hello!", self.modelNumber];
return message;
}
@end
我的main.m样本如下:
Higgie *talkingiPhone = [[Higgie alloc]init];
talkingiPhone.phoneName = @"iPhone 7";
talkingiPhone.modelNumber = @"iOS 9";
NSLog(@"I am an %@.", talkingiPhone.phoneName);
Higgie *talkingAndroid = [[Higgie alloc]init];
talkingAndroid.phoneName = @"Samsung S7";
talkingAndroid.modelNumber = @"Android MacadamiaNutCookie";
NSLog(@"Phone Name: %@", talkingAndroid.phoneName);
NSLog(@"Model Number/OS: %@", talkingAndroid.modelNumber);
[talkingiPhone speak];
[talkingAndroid speak];
NSLog(@"%@", [talkingiPhone message]);
在 Higgie.m 中,我创建了一个名为 "SpeakTwo" 的方法,它应该 return 一个名为 message 的 NSString * 变量。我也试过在最后一行调用 NSString *message,但它不起作用。 如何在控制台中显示字符串 message?
更新:
基本上,我想做这样的事情:
[说话iPhone speakTwo];
NSLog(@"%@", 消息);
这不起作用,尽管我不知道为什么。我很确定 speakTwo return 是字符串消息,然后我应该能够使用 NSLog 将它记录到控制台。
为了访问 "message" 变量中的值并将其输出到控制台,我们需要做一些事情。
首先,我们需要获取该值并将其存储在某个地方以备后用。
我们可以通过您创建的辅助方法 (speakTwo) 访问 "message" 中的值。为了调用该方法,我们需要一个包含该方法的 class 实例:Higgie。在您的 main.m 中,您已经创建了一个 Higgie 实例 - talkingiPhone - 我们可以使用它。
我们将在您的 main.m 中创建一个指向 NSString 结果的新指针,以保存我们从 Higgie 的 speakTwo 方法中检索到的值:
NSString *result = [talkingiPhone speakTwo];
接下来,我们需要将其实际输出到控制台(就像您一直在做的那样):
NSLog(@"This is the result of speakTwo: %@", result);
编辑:值 return 到哪里,这有什么用?
每次方法 运行 时都会 return 编辑值。您是否 "catch" 该值取决于您的代码。在我给出的示例中,我们将 returned 值存储在一个指向 NSString result
的新指针中。如果您只是调用 [talkingiPhone speakTwo];
而没有将其分配给变量,则永远不会访问 return 值。更一般地说,该值被 returned 到调用方法的地方 从 ,而不是它实现的地方(所以在 main.m 中,而不是在 Higgie.m).
这很有用,因为它允许我们有一个方法来做一些通用的和 class-适当的事情。您有 Higgies,并且经常想让他们输出他们的型号。使用这样的方法意味着 Higgie 的每个实例都可以使用 speakTwo 并且它将包括 他们的 型号,而不是所有 Higgie 实例的单个型号。
您可以这样做以符合您在 main.m
中的代码,它声明了一个额外的 属性 message
。
speak
方法将文本写入 message
,main.m 中的最后一行记录消息。
#import <Foundation/Foundation.h>
@interface Higgie : NSObject
@property NSString *phoneName;
@property NSString *modelNumber;
@property NSString *message;
-(void)speak;
@end
#import "Higgie.h"
@implementation Higgie
-(void)speak
{
self.message = [NSString stringWithFormat:"%@ says Hello There!", self.phoneName];
}
@end
这是你犯的一个相当有趣的错误。
在您的 speakTwo
方法中,您正在创建一个 message
变量。在那个方法里面 你 知道它叫做 message
,在外面它没有名字。
要检索该对象,您可以调用函数 speakTwo
(就像 TomSwift 建议的那样)而不是 message
,因为名称 message
根本不存在于该函数之外,而 speakTwo
是对象的已知函数。
收到字符串后,您可以决定如何处理它,您可以将它存储在一个变量中(这就像为其分配一个名称),如下所示:
NSString *iPhoneMessage = [talkingiPhone speakTwo];
或者你可以马上打印出来,像这样:
NSLog(@"%@", [talkingiPhone speakTwo]);
首先,我会告诉你,我是 Objective-C 的极限初学者。如此之多以至于我在这里问一个关于我目前关注的关于 CodeSchool.com 的在线教程的问题。我在教程中做得很好,但我也在使用 Xcode 命令行工具,在教程中编写我自己的主题版本。
我遇到的问题是调用 return 字符串的自定义方法,例如 NSString *。我的头文件名为 Higgie.h 如下:
#import <Foundation/Foundation.h>
@interface Higgie : NSObject
@property NSString *phoneName;
@property NSString *modelNumber;
-(void)speak;
-(NSString *)speakTwo;
@end
我的实现文件,名为Higgie.m,如下:
#import "Higgie.h"
@implementation Higgie
-(void)speak;
{
NSLog(@"%@ says Hello There!", self.phoneName);
}
-(NSString *) speakTwo; {
NSString *message = [NSString stringWithFormat:@"%@ says hello!", self.modelNumber];
return message;
}
@end
我的main.m样本如下:
Higgie *talkingiPhone = [[Higgie alloc]init];
talkingiPhone.phoneName = @"iPhone 7";
talkingiPhone.modelNumber = @"iOS 9";
NSLog(@"I am an %@.", talkingiPhone.phoneName);
Higgie *talkingAndroid = [[Higgie alloc]init];
talkingAndroid.phoneName = @"Samsung S7";
talkingAndroid.modelNumber = @"Android MacadamiaNutCookie";
NSLog(@"Phone Name: %@", talkingAndroid.phoneName);
NSLog(@"Model Number/OS: %@", talkingAndroid.modelNumber);
[talkingiPhone speak];
[talkingAndroid speak];
NSLog(@"%@", [talkingiPhone message]);
在 Higgie.m 中,我创建了一个名为 "SpeakTwo" 的方法,它应该 return 一个名为 message 的 NSString * 变量。我也试过在最后一行调用 NSString *message,但它不起作用。 如何在控制台中显示字符串 message?
更新: 基本上,我想做这样的事情: [说话iPhone speakTwo]; NSLog(@"%@", 消息); 这不起作用,尽管我不知道为什么。我很确定 speakTwo return 是字符串消息,然后我应该能够使用 NSLog 将它记录到控制台。
为了访问 "message" 变量中的值并将其输出到控制台,我们需要做一些事情。
首先,我们需要获取该值并将其存储在某个地方以备后用。
我们可以通过您创建的辅助方法 (speakTwo) 访问 "message" 中的值。为了调用该方法,我们需要一个包含该方法的 class 实例:Higgie。在您的 main.m 中,您已经创建了一个 Higgie 实例 - talkingiPhone - 我们可以使用它。
我们将在您的 main.m 中创建一个指向 NSString 结果的新指针,以保存我们从 Higgie 的 speakTwo 方法中检索到的值:
NSString *result = [talkingiPhone speakTwo];
接下来,我们需要将其实际输出到控制台(就像您一直在做的那样):
NSLog(@"This is the result of speakTwo: %@", result);
编辑:值 return 到哪里,这有什么用?
每次方法 运行 时都会 return 编辑值。您是否 "catch" 该值取决于您的代码。在我给出的示例中,我们将 returned 值存储在一个指向 NSString result
的新指针中。如果您只是调用 [talkingiPhone speakTwo];
而没有将其分配给变量,则永远不会访问 return 值。更一般地说,该值被 returned 到调用方法的地方 从 ,而不是它实现的地方(所以在 main.m 中,而不是在 Higgie.m).
这很有用,因为它允许我们有一个方法来做一些通用的和 class-适当的事情。您有 Higgies,并且经常想让他们输出他们的型号。使用这样的方法意味着 Higgie 的每个实例都可以使用 speakTwo 并且它将包括 他们的 型号,而不是所有 Higgie 实例的单个型号。
您可以这样做以符合您在 main.m
中的代码,它声明了一个额外的 属性 message
。
speak
方法将文本写入 message
,main.m 中的最后一行记录消息。
#import <Foundation/Foundation.h>
@interface Higgie : NSObject
@property NSString *phoneName;
@property NSString *modelNumber;
@property NSString *message;
-(void)speak;
@end
#import "Higgie.h"
@implementation Higgie
-(void)speak
{
self.message = [NSString stringWithFormat:"%@ says Hello There!", self.phoneName];
}
@end
这是你犯的一个相当有趣的错误。
在您的 speakTwo
方法中,您正在创建一个 message
变量。在那个方法里面 你 知道它叫做 message
,在外面它没有名字。
要检索该对象,您可以调用函数 speakTwo
(就像 TomSwift 建议的那样)而不是 message
,因为名称 message
根本不存在于该函数之外,而 speakTwo
是对象的已知函数。
收到字符串后,您可以决定如何处理它,您可以将它存储在一个变量中(这就像为其分配一个名称),如下所示:
NSString *iPhoneMessage = [talkingiPhone speakTwo];
或者你可以马上打印出来,像这样:
NSLog(@"%@", [talkingiPhone speakTwo]);