Swift UIImage 扩展
Swift UIImage extension
在处理 UIImage 和 Asset Catalog 时,我试图使用枚举和方便的初始化程序使我的代码更安全。我的代码在下面。
import UIKit
extension UIImage {
enum AssetIdentifier: String {
case Search = "Search"
case Menu = "Menu"
}
convenience init(assetIdentifier: AssetIdentifier) {
self.init(named: AssetIdentifier.RawValue)
}
}
目前我遇到了这个错误。
'Cannot invoke 'UIImage.init' with an argument of type '(named: RawValue.Type)'
有2个问题:
1。失败的初始化
在您的 convenience initializer
中,您正在呼叫 failable initializer
。那么,当您依赖 failable initializer
时,您如何保证始终创建 UIImage
的实例,根据定义,它不能保证这一点?
您可以在调用 failable init
.
时使用魔术 !
来解决此问题
2。引用您收到的参数
当您调用 self.init
时,您没有传递在您的 init 中收到的参数。您而是在引用枚举定义。要解决此问题,请替换此
self.init(named: AssetIdentifier.RawValue)
有了这个
self.init(named: assetIdentifier.rawValue)
总结
这是结果
extension UIImage {
enum AssetIdentifier: String {
case Search = "Search"
case Menu = "Menu"
}
convenience init(assetIdentifier: AssetIdentifier) {
self.init(named: assetIdentifier.rawValue)!
}
}
测试
UIImage(assetIdentifier: .Search)
您可以使用此代码。我已经测试过了。
import UIKit
import Foundation
enum AssetIdentifier: String {
case Search = "Search"
case Menu = "Menu"
}
extension UIImage {
convenience init?(assetIdentifier: AssetIdentifier) {
self.init(named: assetIdentifier.rawValue)
}
}
class ViewController: UIViewController {
@IBOutlet var imageview: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
imageview.image = UIImage(assetIdentifier: AssetIdentifier.Menu)
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
在处理 UIImage 和 Asset Catalog 时,我试图使用枚举和方便的初始化程序使我的代码更安全。我的代码在下面。
import UIKit
extension UIImage {
enum AssetIdentifier: String {
case Search = "Search"
case Menu = "Menu"
}
convenience init(assetIdentifier: AssetIdentifier) {
self.init(named: AssetIdentifier.RawValue)
}
}
目前我遇到了这个错误。
'Cannot invoke 'UIImage.init' with an argument of type '(named: RawValue.Type)'
有2个问题:
1。失败的初始化
在您的 convenience initializer
中,您正在呼叫 failable initializer
。那么,当您依赖 failable initializer
时,您如何保证始终创建 UIImage
的实例,根据定义,它不能保证这一点?
您可以在调用 failable init
.
!
来解决此问题
2。引用您收到的参数
当您调用 self.init
时,您没有传递在您的 init 中收到的参数。您而是在引用枚举定义。要解决此问题,请替换此
self.init(named: AssetIdentifier.RawValue)
有了这个
self.init(named: assetIdentifier.rawValue)
总结
这是结果
extension UIImage {
enum AssetIdentifier: String {
case Search = "Search"
case Menu = "Menu"
}
convenience init(assetIdentifier: AssetIdentifier) {
self.init(named: assetIdentifier.rawValue)!
}
}
测试
UIImage(assetIdentifier: .Search)
您可以使用此代码。我已经测试过了。
import UIKit
import Foundation
enum AssetIdentifier: String {
case Search = "Search"
case Menu = "Menu"
}
extension UIImage {
convenience init?(assetIdentifier: AssetIdentifier) {
self.init(named: assetIdentifier.rawValue)
}
}
class ViewController: UIViewController {
@IBOutlet var imageview: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
imageview.image = UIImage(assetIdentifier: AssetIdentifier.Menu)
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}