Segue标识符
你在视图控制器代码中为segue标识符声明了多少次相同的字符串?也许只有一次,或者两次,或者更多?我经常在代码中多次使用相同的标识符字符串。
当你只声明一次时,这可能是可以的,但是如果声明两次或更多次呢?让我解释一下如何使用一个简单的静态字符串来存储segue标识符。
我在说什么?
我指的是手动执行segue时使用的一个segue字符串,例如:
(自我performSegueWithIdentifier:@“ToExplanation”发送方:自我];
这里我们在故事板中定义了一个segue,我们给它一个标识符字符串ToExplanation
。然后我们可以手动触发那个segue从视图控制器代码中开始通过调用performSegueWithIdentifier:发送方:
方法。这里要记住的是当我们使用@ToExplanation
创建新文件的快捷方式NSString
对象时,我们仍在创建一个新的对象实例。如果我们只做一次,也没那么糟,但如果我们一遍又一遍地做呢?
例如,我们可能会在prepareForSegue:发送方:
方法,如:
-(无效)prepareForSegue:(UIStoryboardSegue*)segue发送方:(id)发送方{如果((segue。标识符isEqualToString:@“ToExplanation”]){ExplanationViewController*风投=segue。destinationViewController;风投。someProperty=kSomeValue;}}
在本例中,我们再次声明一个newNSString
对象的初始化值为“toexplain”。这是同一字符串的第二个实例。如果我们在视图控制器的其他地方使用这个segue标识符字符串呢?我们应该创建多少次相同的字符串。
此外,如果我们决定以后重命名segue标识符呢?我们现在必须执行查找和替换操作,以确保在代码中更新此字符串的所有实例。我觉得这不是个好主意。
解决方案
解决办法很简单。只需要在视图控制器的顶部定义一个实例变量。你可以在后面定义@ implementation
关键字。你可以把这个放在你的后面@ synthesize
语句,如果你还在使用它们(记住,是ios6引入的默认的合成)。
在我的例子中,我定义了一个静态的NSString实例来存储segue标识符的值:
NSString*常量segueToExplanationView=@“ToExplanation”;
在执行segue时,我可以使用这个字符串进行比较:
-(无效)prepareForSegue:(UIStoryboardSegue*)segue发送方:(id)发送方{如果((segue。标识符isEqualToString:segueToExplanationView]){ExplanationViewController*风投=segue。destinationViewController;风投。someProperty=kSomeValue;}}
编辑:我更新了这篇文章,使用了const变量,而不是静态作用域变量。谢谢Joony !