我已经为textview创建了一个插座,我试图在函数中使用它,在它未正常工作的函数之外。当我将它与StartFunction(textBox)这样的函数一起传递时,它可以正常工作,但是这个函数还必须处理其他一些类似的事情,我不喜欢用函数传递所有内容的想法。
什么是更好的选择?
// Header File
- (IBAction)startButton_clicked:(id)sender;
@property (strong, nonatomic) IBOutlet UITextView *textBox;
// Main file
- (IBAction)startButton_clicked:(id)sender {
if (currentlyOn == false) StartFunction(headLabel);
else textBox.text = @"Already Started"; // Works fine here
}
void StartFunction(UILabel *_headLabel)
{
_headLabel.text = @"This works fine because it's passed with the function";
textBox.text = @"textBox is undeclared here";
}
答案 0 :(得分:0)
函数不是类的一部分,它们无权访问实例变量。为什么不将此函数设为实例方法?
答案 1 :(得分:0)
普通的C函数不能用作Objective-C类的成员。
在您的实施中声明它不会改变它。
使用Objective-C方法,或将对象传递给C函数(如果它们具有公共iVar,这通常是错误的设计,或者如果您可以使用属性)。
首先解决方案总是更好。如果您不希望方法的原型出现在公共头文件中,则可以使用类扩展。
答案 2 :(得分:0)
听起来你需要使用方法而不是函数来处理你的情况。
方法实际上是一种函数,它以静默方式将引用传递给自身的实例,其名称为{ {1}}。使用该引用,该方法可以访问实例变量,方法和属性。 self
的使用也经常为您默默添加。
因此,假设您的代码是self
的一部分,您的方法myClass
大约(我们正在掩盖一些细节)与函数相同:
startButton_clicked
注意额外的参数以及在赋值中使用IBAction startButton_clicked(myClass *self, id sender)
{
if (currentlyRecording == false)
StartRecordingAudio(headLabel);
else
self.textBox.text = @"Already Started"; // Works fine here
}
。方法调用:
self
约相当于:
[someInstanceOfMyClass startButton_clicked:theSender];
这是默默传递startButton_clicked(someInstanceOfMyClass, theSender);
来自的地方。
函数根本不会以这种方式处理,没有传递隐藏的参数,并且缺乏以静默方式访问实例变量,属性和方法。
方法和功能都有其用途,您可以根据需要进行选择。在您的情况下,您可能需要一个方法来访问实例。
HTH。