如何创建一个 returns 整数元组的枚举函数?
How to create an enum function that returns a tuple of Ints?
大家好。当我提供 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.
这需要一些修改。关键修改是将screenSize()
的return类型指定为(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
大家好。当我提供 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.
这需要一些修改。关键修改是将screenSize()
的return类型指定为(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