2016-09-29 40 views
0

如果我在以下代码中使用.....范围运算符,则操场会引发错误。什么是斯威夫特3实现代码的正确方法如何在Swift中编写开关语句切换范围3

的Xcode 8操场斯威夫特3(我用雨燕2.3写的书工作):你有它正确

let osxVersion: Int = (1...12) 
switch osxVersion { 
    case 1...8: 
     print("Some big cat!") 
    case 9: 
     print("Mavericks") 
    case 10: 
     print("Yosemite") 
    case 11: 
     print("El Capitan") 
    case 12: 
     print("Sierra") 
    default: 
     print("Appledonttellmenuthin!!") 
} 
+4

'(1 ... 12)'在任何Swift版本中都不是'Int'。你是否试图从该范围中随机选择一个元素? –

+0

我认为他并不是指它的字面意思(1 ... 12),而是暗示它是其中的一个数字(osxVersion就是这样做的) –

回答

0

。在操场

let osxVersion = 7 
switch osxVersion { 
case 0...5: 
    print("hi") 
case 6...8: 
    print("hello") 
default: 
    print("hey") 
} 

运行,将打印 “你好”

0

osxVersion的类型范围,而不是INT

可能的声明:

let osxVersion:Range = (1...12) 

let osxVersion = (1...12) 

So th e型将在上面的片段被自动推断为范围

的附加提示: 不能在开关壳体检查诠释当输入范围

可能的解决方案:

let osxVersion = (1...12) 
switch osxVersion { 
case -12...0: 
    print("Some big cat!") 
case 1...12: 
    print("Mavericks") 
case 13...24: 
    print("Yosemite") 
case 25...36: 
    print("El Capitan") 
case 37...48: 
    print("Sierra") 
default: 
    print("Appledonttellmenuthin!!") 
} 

let osxVersion = 10 
switch osxVersion { 
case 0...4: 
    print("Some big cat!") 
case 5...8: 
    print("Mavericks") 
case 9...12: 
    print("Yosemite") 
case 13...16: 
    print("El Capitan") 
case 17...20: 
    print("Sierra") 
default: 
    print("Appledonttellmenuthin!!") 
}