大家好。当我提供iDevice类型(屏幕尺寸数字在这里是假的)时,我正在创建enum
以获取屏幕分辨率。
当我不使用enum
函数时,我的代码可以工作,但是我想使用enum
函数来保持事物的整洁。
到目前为止,我使用enum
函数的代码如下...
enum iDeviceType {
case iPhone(String)
case iPad(String)
...
func screenSize()->(Int,Int){
var myModel: (Int, Int)
switch ????? {
case .iPhone(let model):
switch model {
case "XR" : myModel = (width: 400, height: 612)
case "6" : myModel = (width: 465, height: 712)
case "6Plus" : myModel = (width: 465, height: 912)
...
default: myModel = (width: 365, height: 512)
}
case .iPad(let model):
switch model {
case "Air 1gen" : myModel = (width: 365, height: 512)
case "Air 2gen" : myModel = (width: 405, height: 565)
...
default: myModel = (width: 365, height: 512)
}
default:
print("not an iOS device")
}
return myModel
}
}
let myModel = iDeviceType.iPhone("XR").screenSize()
print(myModel.height)
最后两行代码是我想调用enum
函数并返回结果的方式。
我想念什么?我确实在问号处尝试self
来获取当前的iDeviceType
,但是无法使其正常工作。
有什么建议可以使其更加清晰?我正在使用Swift 5。
答案 0 :(得分:1)
这可以进行一些修改。关键的修改是将screenSize()
的返回类型指定为(width: Int, height: Int)
,以便您可以解压缩结果。
enum iDeviceType {
case iPhone(String)
case iPad(String)
case other
func screenSize() -> (width: Int, height: Int) {
var myModel = (width: 0, height: 0)
switch self {
case .iPhone(let model):
switch model {
case "XR" : myModel = (width: 400, height: 612)
case "6" : myModel = (width: 465, height: 712)
case "6Plus" : myModel = (width: 465, height: 912)
default: myModel = (width: 365, height: 512)
}
case .iPad(let model):
switch model {
case "Air 1gen" : myModel = (width: 365, height: 512)
case "Air 2gen" : myModel = (width: 405, height: 565)
default: myModel = (width: 365, height: 512)
}
default:
print("not an iOS device")
}
return myModel
}
}
let myModel = iDeviceType.iPhone("XR").screenSize()
print(myModel.height)
612
为screenSize
赋予计算属性:
由于您没有将任何内容传递给screenSize()
,因此请考虑使其成为计算属性:
更改:
func screenSize() -> (width: Int, height: Int) {
收件人:
var screenSize: (width: Int, height: Int) {
然后像这样访问它:
let myModel = iDeviceType.iPhone("XR").screenSize