布莱恩F爱
向一位来自Portlandyobet英雄联盟的谷歌开发专家学习Angular、Web技术和Node.js。
广告 ·ultimatecourses.com
用终极课程学习Angular的正确方法

Segue标识符

你在视图控制器代码中为segue标识符声明了多少次相同的字符串?也许只有一次,或者两次,或者更多?我经常在代码中多次使用相同的标识符字符串。

当你只声明一次时,这可能是可以的,但是如果声明两次或更多次呢?让我解释一下如何使用一个简单的静态字符串来存储segue标识符。

我在说什么?

我指的是手动执行segue时使用的一个segue字符串,例如:

(自我performSegueWithIdentifier:@“ToExplanation”发送方:自我];

这里我们在故事板中定义了一个segue,我们给它一个标识符字符串ToExplanation。然后我们可以手动触发那个segue从视图控制器代码中开始通过调用performSegueWithIdentifier:发送方:方法。这里要记住的是当我们使用@ToExplanation创建新文件的快捷方式NSString对象时,我们仍在创建一个新的对象实例。如果我们只做一次,也没那么糟,但如果我们一遍又一遍地做呢?

例如,我们可能会在prepareForSegue:发送方:方法,如:

-(无效)prepareForSegue:(UIStoryboardSegue*)segue发送方:(id)发送方{如果((segue标识符isEqualToString:@“ToExplanation”]){ExplanationViewController*风投=seguedestinationViewController;风投someProperty=kSomeValue;}}

在本例中,我们再次声明一个newNSString对象的初始化值为“toexplain”。这是同一字符串的第二个实例。如果我们在视图控制器的其他地方使用这个segue标识符字符串呢?我们应该创建多少次相同的字符串。

此外,如果我们决定以后重命名segue标识符呢?我们现在必须执行查找和替换操作,以确保在代码中更新此字符串的所有实例。我觉得这不是个好主意。

解决方案

解决办法很简单。只需要在视图控制器的顶部定义一个实例变量。你可以在后面定义@ implementation关键字。你可以把这个放在你的后面@ synthesize语句,如果你还在使用它们(记住,是ios6引入的默认的合成)。

在我的例子中,我定义了一个静态的NSString实例来存储segue标识符的值:

NSString*常量segueToExplanationView=@“ToExplanation”;

在执行segue时,我可以使用这个字符串进行比较:

-(无效)prepareForSegue:(UIStoryboardSegue*)segue发送方:(id)发送方{如果((segue标识符isEqualToString:segueToExplanationView]){ExplanationViewController*风投=seguedestinationViewController;风投someProperty=kSomeValue;}}

编辑:我更新了这篇文章,使用了const变量,而不是静态作用域变量。谢谢Joony !

布莱恩F爱

嗨,我是布莱恩。我对TypeScript, Angular和Node.js感兴趣。我和我最好的朋友邦妮结婚了,我住在波特兰,我经常滑雪。