Gho*_*108 1 macos cocoa swift swift4
我正在尝试将我的Swift 3代码转换为Swift 4.我收到此错误消息:
"String"类型的表达式模式不能与"NSStoryboardSegue.Identifier"类型的值匹配
这是我的代码:
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
switch segue.identifier {
case "showVC1":
// DO SOMETHING
break
default:
break
}
}
Run Code Online (Sandbox Code Playgroud)
我应该使用哪种类型而不是"字符串"?
从Swift 4开始,故事板标识符是可选的NSStoryboardSegue.Identifier,定义为
extension NSStoryboardSegue {
public struct Identifier : RawRepresentable, Equatable, Hashable {
public init(_ rawValue: String)
public init(rawValue: String)
}
}
Run Code Online (Sandbox Code Playgroud)
你可以打开它rawValue:
switch segue.identifier?.rawValue {
case "showVC1"?:
// do something ...
default:
break
}
Run Code Online (Sandbox Code Playgroud)
但是,建议的模式是为每个故事板标识符定义常量:
extension NSStoryboardSegue.Identifier {
static let showVC1 = NSStoryboardSegue.Identifier("showVC1")
// other storyboard identifiers ...
}
Run Code Online (Sandbox Code Playgroud)
然后可以匹配:
switch segue.identifier {
case .showVC1?:
// do something ...
default:
break
}
Run Code Online (Sandbox Code Playgroud)
在这两个示例中,"可选模式" x?(用于快捷方式.some(x))用于匹配可选值.
为其他"标识符"引入了类似的类型,例如
NSImage.Name,它是NSImage(named:)
Swift 4中的参数类型.
有关更多信息,请参阅swift-users邮件列表中的讨论,从以下位置开始
一般的想法(据我所知)是为每种标识符创建单独的类型.特别是(来自https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20170717/005940.html):
...我们故意劝阻名字的字符串文字.字符串文字应该只在一个地方:名称常量的定义.其他一切都应该使用常数.编译器可以提供常量的自动完成和拼写检测.字符串文字没有得到.
| 归档时间: |
|
| 查看次数: |
4044 次 |
| 最近记录: |