无法用UIImage表示元组转换

时间:2017-05-01 14:04:54

标签: ios swift

我尝试为我的应用设置主题(包括背景和图片)。我试试这段代码:

import UIKit

enum AppTheme {
    case dayMode
    case nightMode

    func setBackground() -> (UIImage, UIImage) {
        switch self {

        case .dayMode():
            let backgroundImage = #imageLiteral(resourceName: "DayMode")
            let sunControllerImage = #imageLiteral(resourceName: "sun")
            return (backgroundImage, sunControllerImage)

        case .nightMode():
            let backgroundImage = #imageLiteral(resourceName: "NightMode")
            let sunControllerImage = #imageLiteral(resourceName: "moon")
            return (backgroundImage, sunControllerImage)

        }
    }
}

然后在viewDidLoad,我尝试:

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        (backgroundImg.image, sunControllerImg.image) = AppTheme.nightMode.setBackground()

    }

但是,有一个错误:

  

无法将元组转换(UIImage, UIImage)表达为(UIImage?, UIImage?)(又名(Optional<UIImage>, Optional<UIImage>))。

无论如何都要处理这个问题?

1 个答案:

答案 0 :(得分:1)

试试这种方式

enum AppTheme {
    case dayMode
    case nightMode

    func setBackground() -> (UIImage?, UIImage?) {
        switch self {

        case .dayMode():
            let backgroundImage = #imageLiteral(resourceName: "DayMode")
            let sunControllerImage = #imageLiteral(resourceName: "sun")
            return (backgroundImage, sunControllerImage)

        case .nightMode():
            let backgroundImage = #imageLiteral(resourceName: "NightMode")
            let sunControllerImage = #imageLiteral(resourceName: "moon")
            return (backgroundImage, sunControllerImage)

        }
    }
}

因为UIImage是可选的。

Swift有一个可用的初始化器的概念,UIImage就是它们的概念。初始化程序返回一个Optional,因此如果无法创建图像,它将返回nil。