我正在尝试创建一组5个引导屏幕,其中包含不同的图像和文本。为了使代码更整洁,我只需要一个功能来设置当前屏幕的图像。
我当前的功能是这个:
private let facebookImage: UIImageView = {
let image = #imageLiteral(resourceName: "facebook_icon")
let imageView = UIImageView(image: image)
imageView.frame = CGRect(x: 0, y: 0, width: 250, height: 250)
return imageView
}()
我希望能够做这样的事情...
private let displayImage: UIImageView = {
let image = currentImage
let imageView = UIImageView(image: image)
imageView.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
return imageView
}()
我可以在其中将currentImage
变量更改为在类中声明的图像文字:
var twitter : UIImage = #imageLiteral(resourceName: "twitter_icon")
var facebook : UIImage = #imageLiteral(resourceName: "facebook_icon")
var linkedin : UIImage = #imageLiteral(resourceName: "linkedin_icon")
var instagram : UIImage = #imageLiteral(resourceName: "instagram_icon")
var youtube : UIImage = #imageLiteral(resourceName: "youtube_icon")
weak var currentImage : UIImage?
出现错误时出现我的问题:Instance member 'currentImage' cannot be used on type 'ViewController'
,但我不明白为什么。我已经审查了其他相关问题,但它们似乎无济于事。
这里您需要一个函数而不是实例属性
func getImgaeV(_ imageName:String) -> UIImageView {
let imageView = UIImageView(image: imageName)
imageView.frame = CGRect(x: 0, y: 0, width: 250, height: 250)
return imageView
}
使用
facebookImage = getImgaeV("facebook_icon")
twitterImage = getImgaeV("twitter_icon")
我认为您的属性有些相似,因此您可以这样做
var allImageViews = [UIImageView]()
然后在viewDidLoad
里面
allImageViews = ["facebook_icon","twitter_icon"].map { getImgaeV($0) }