Swift 4.2未来版本中的Spring弃用错误
我正在一个开源无线电应用程序项目中使用Spring 代码是:Swift 4.2未来版本中的Spring弃用错误,swift,spring,xcode,Swift,Spring,Xcode,我正在一个开源无线电应用程序项目中使用Spring 代码是: @IBInspectable var firstSelectedImage: UIImage? { didSet { if let image = firstSelectedImage { var tabBarItems = self.tabBar.items as [UITabBarItem]! tabBarItems?[0].selectedImage = i
@IBInspectable var firstSelectedImage: UIImage? {
didSet {
if let image = firstSelectedImage {
var tabBarItems = self.tabBar.items as [UITabBarItem]!
tabBarItems?[0].selectedImage = image.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
}
}
}
我遇到的问题是:
var tabBarItems = self.tabBar.items as [UITabBarItem]!
Xcode抛出错误:
使用“!”此处已弃用,并将在未来版本中删除。解决方案非常简单: 1.强制展开或强制上下投射确实不安全,可能这就是苹果将其移除的原因
var tabBarItems = self.tabBar.items as [UITabBarItem]!
将其更改为:
var tabBarItems = self.tabBar.items as [UITabBarItem]?
但是tabBarItems可以是零,所以我推荐一个守卫或者类似的东西
guard var tabBarItems = self.tabBar.items as [UITabBarItem]? else { return }
示例代码:
class C1 {
}
class C2: C1 {
}
let cc2 = C2()
var firstSelectedImage: UIImage? {
didSet {
if let image = firstSelectedImage {
guard var tabBarItems = cc2 as C1? else {return}
print(tabBarItems)
}
}
}
spring是什么?它与您发布的代码和错误有什么关系?这看起来像是普通的uikitapi。只需将
作为[uitabaritem]删除即可代码>。为什么不必要地强制转换值?还有,为什么代码盲目地假设至少有一项?如果没有项目,你的代码将崩溃。这是春天,我只是想得到我必须工作的代码,没有任何贬值。我使用的是几年没有更新过的Swift Radio Pro,因此我尝试在新的iOS上使用它。明天我会试试你的建议,谢谢。但我的观点是你的问题与春天无关。在你的问题中根本没有必要提到它。没有必要把var tabBarItems=self.tabBar.items作为[UITabBarItem]?
来使用,因为self.tabBar.items
已经声明为[UITabBarItem]?
@rmaddy我忘了检查一下,我们在一杯水里淹死了。太棒了!我需要其中的九个实例,就像在原始spring代码中一样。这就是我最后所做的:@IBInspectable var normalTint:UIColor=UIColor.clear{didSet{UITabBar.appearance().tintColor=normalTint UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor:normalTint],for:UIControl.State())}非常感谢!令人遗憾的是,其他人似乎只关注与他们无关的小事,而不是试图帮助他们。