【发布时间】:2016-01-17 16:58:04
【问题描述】:
我正在尝试修改一些一年前运行良好的 Swift 源代码;但是自从 Apple 发布了 Swift 2.0 之后,Xcode 拒绝直接运行我现有的代码;坚持要我更新它以使用新的 Swift。感谢苹果。
那么,谁能解释一下这个完全愚蠢的错误?
元组类型'(NSString, NSString)'的值没有成员'0'
失败的代码行:
if let match = (try Filesystem.GetMounts()?.filter {
mapping["pattern"] != nil ? try $0.0 =~ mapping["pattern"]! : $0.0 as String == uncpath!
}.values.array.first) {
...
}
GetMounts 函数签名:
class func GetMounts() throws -> [NSString:NSString]?
正则表达式运算符:
func =~(string:NSString, regex:NSRegularExpression) -> Bool {
let matches = regex.numberOfMatchesInString(string as String, options: [], range: NSMakeRange(0, string.length))
return matches > 0
}
func =~(string:NSString, pattern:NSString) throws -> Bool {
let matches = try NSRegularExpression(pattern: pattern as String, options: NSRegularExpressionOptions.DotMatchesLineSeparators).numberOfMatchesInString(string as String, options: [], range: NSMakeRange(0, string.length))
return matches > 0
}
func =~(string:NSString, pattern:String) throws -> Bool {
let matches = try NSRegularExpression(pattern: pattern as String, options: NSRegularExpressionOptions.DotMatchesLineSeparators).numberOfMatchesInString(string as String, options: [], range: NSMakeRange(0, string.length))
return matches > 0
}
【问题讨论】:
-
你在一行代码中做的太多了。还有
=~是什么我只知道~=!? -
尝试分成几行并将其移出 if 条件。该代码应该分成 3 到 5 行。
-
=~是我写的一个辅助运算符,因为我不喜欢内置的运算符。此外,虽然将它分成多行可能是个好主意,但它没有办法在这里帮助我。我不是要求更正我的编程风格,我是在问为什么 Xcode 对我撒谎! -
@SodAlmighty 拆分为多行以及创建一个可验证的示例将帮助您,至少,让我们其他 SO 成员更轻松地尝试帮助您。
-
把它分成多行,你会发现这对你有很大帮助。这里可能有一些编译错误,Xcode 只是很困惑,它假设某些东西是因为你写了一些错误的东西,并且这个假设变成了错误消息 - 拆分我们的代码,你会得到更好的错误报告。
标签: xcode swift compiler-errors tuples