如何创建一个 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