作为夫特4,故事板标识符是可选NSStoryboardSegue.Identifier
,其被定义为
extension NSStoryboardSegue {
public struct Identifier : RawRepresentable, Equatable, Hashable {
public init(_ rawValue: String)
public init(rawValue: String)
}
}
可以在其rawValue
切换:
switch segue.identifier?.rawValue {
case "showVC1"?:
// do something ...
default:
break
}
的推荐图案然而是定义每个 故事板标识符的常量:
extension NSStoryboardSegue.Identifier {
static let showVC1 = NSStoryboardSegue.Identifier("showVC1")
// other storyboard identifiers ...
}
其然后可以进行匹配:
switch segue.identifier {
case .showVC1?:
// do something ...
default:
break
}
在这两个例子中,“任选的图案” x?
(对于.some(x)
快捷方式) 被用于匹配一个可选值。
为其他“标识符”引入了类似的类型,例如, NSImage.Name
,这是NSImage(named:)
斯威夫特4
参数的类型有关更多信息,请参阅讨论迅速用户邮件 表,从
一般的想法(据我所知)是为每种标识符创建单独的类型 。特别是(从https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20170717/005940.html):
......我们故意不鼓励名称的字符串文字。字符串文字应该只在一个地方:名称常量的定义。其他一切都应该使用常量。编译器可以提供常量的自动完成和拼写检测。字符串文字没有得到。
@MartinR我还没有访问Swift 4,从规范回答。我删除了提示'=='可能的部分答案。在一个不相干的笔记中,我真的很惊讶苹果公司在这方面做了一个突破性的改变:我想不出将'标识符'从'String'改为它自己的类型所带来的好处。感谢您的评论! – dasblinkenlight
对其他“标识符字符串”做了类似的修改,例如'NSImage(named:NSImage.Name)'。如果我没有记错的话,那是在Swift邮件列表中讨论的(有争议的)。我会尽量在稍后找到一些参考资料,列表档案目前处于离线状态。我感到奇怪的是,这种改变并没有通过提案流程,至少我不记得这一点。 –
我找到了参考资料,请参阅下面的更新答案。 –