微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – Xcode8:在框架中使用图像文字

我目前正在更新一个使用图像文字的项目,以享受非可选图像的好处.该项目正在导入各种框架,框架包含图像.

在框架中,我们必须在UIImage上声明一个扩展来覆盖初始化,因为它正在寻找错误包中的图像.我们做了类似的事情:

extension UIImage {   
    convenience init?(framework_named imageName: String) {
        let bundle = Bundle(for: ClassNameInFramework.self)
        self.init(named: imageName,in: bundle,compatibleWith: nil)
    }
}

我也希望在框架中使用图像文字,但像以前一样,文字正在寻找图像的错误包并且应用程序崩溃.

有谁知道,如何指定要查找图像的图像文字

解决方法

我发现了一个非常简单的解决方法,并且惊讶于在其他帖子上找不到它.我希望它可以更优雅,但它比在我看来使用字符串类型的UIImage(名称:in:compatibleWith :)初始化程序更可取.

我们基本上利用了_ExpressibleByImageLiteral协议,这是Xcode用来确定某个类型是否可由图像文字表达的协议.它是Swift标准库的一部分,但它隐藏在自动完成之外,我想因为想要用图像文字初始化自定义类型并不常见.但是,它正是我们想要的,其行为与其他ExpressibleBy协议完全一样.

struct WrappedBundleImage: _ExpressibleByImageLiteral {
    let image: UIImage?

    init(imageLiteralResourceName name: String) {
        let bundle = Bundle(for: ClassInFramework.self)
        image = UIImage(named: name,compatibleWith: nil)
    }
}

请注意,我使用包装器而不是UIImage子类,这似乎是一个更好的选择.可悲的是,像UIImage这样的课程并不打算成为子类,如果你这样做,你会发现自己会遇到很多麻烦.

现在它的用法变成了:

let image = (
                
                                 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐