如何创建一个返回Int元组的枚举函数?

时间:2019-05-25 23:25:36

标签: swift enums tuples func

大家好。当我提供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。

1 个答案:

答案 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