我已将Objective-C文件转换为Swift,现在将其转换为:
if isCaptured {
let colourView = UIView(frame: window.frame)
colourView?.backgroundColor = UIColor.black
colourView?.tag = 1234
colourView?.alpha = 0
window!.makeKeyAndVisible()
window.addSubview(colourView)
// fade in the view
UIView.animate(withDuration: 0.5, animations: {
colourView?.alpha = 1
})
} else {
// grab a reference to our coloured view
let colourView = window.viewWithTag(1234)
// fade away colour view from main view
UIView.animate(withDuration: 0.5, animations: {
colourView?.alpha = 0
}) { finished in
// remove when finished fading
colourView?.removeFromSuperview()
}
}
但是我遇到了一个错误:
可选类型'UIWindow?'的值必须展开以引用基本类型为“ UIWindow”的成员“ viewWithTag”
此屏幕截图随附于此:
该如何纠正?
答案 0 :(得分:0)
您已经用window!.makeKeyAndVisible()
对其进行了包装。
因此,您可以在这里-> window!.viewWithTag(1234)
。
还将建议阅读https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html。您需要获得基本思路,才能知道力解开意味着什么以及何时可以安全使用。
答案 1 :(得分:0)
如果您的问题出在窗口上,那么您还需要从UIApplication
获取它,您需要解开窗口变量,使用if-let
或guard-let
或在执行之前强制解开viewWithTag()
。
if let delegate = (UIApplication.shared.delegate as? AppDelegate), let window = delegate.window {
if let view123 = window.viewWithTag(123) {
}
}