Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 4.2未来版本中的Spring弃用错误_Swift_Spring_Xcode - Fatal编程技术网

Swift 4.2未来版本中的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

我正在一个开源无线电应用程序项目中使用Spring

代码是:

@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())}非常感谢!令人遗憾的是,其他人似乎只关注与他们无关的小事,而不是试图帮助他们。