我尝试为我的应用设置主题(包括背景和图片)。我试试这段代码:
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>)
)。
无论如何都要处理这个问题?
答案 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。