IOS15 Swift5 2种正向传值方式
IOS15 Swift5 2种正向传值方式
例如自定义一个 UIView 名字叫LJView,继承UIView,搞个UIImageView控件 ,里面 搞个 成员属性
var urlStr: String!
, 在 其他controller里面调用了这个UIView了,
let vi1 = UIView.init() 了,但是 怎么正向传值, 让 urlStr 赋值呢?直接传值?
vi1.urlStr = "http://localhost:8080/demo.png" 直接这么写 , 这张图片会显示在控件里面呢?
答案是 肯定不会的。
第一种方式是。使用 didSet 监听器, 在成员变量后面监听 属性的值是否变化。
var urlStr: String! {
didSet {
guard let urlStr = urlStr else {
//做相应的赋值操作。。。
}
}
}
当然还有一种 属性监听器,叫做 willSet 将要设置的时候。要知道有这个方法
第二种方式 ,在 自定义的控件里面提供一个方法 也叫函数, 这个函数不能搞成私有的,必须对外暴露出去,,也不必使用public ,没有必要。直接写
func setImageUrl(_ urlStr: String){
self.urlStr = urlStr
}
外面在new 自定义View 后, 可以通过 对象调用该 方法。
let vi1 = LJView.init()
vi1.setImageUrl(urlStr: "aaa.png")
以上都是通过属性 正向传值 ,还有一种,通过构造函数,直接赋值,请看我其他博客文章。
大概过程就是重写init方法
private var imageURL: String!
overide init(imageURL: String){
self.imageURL = imageURL
super.init() // 这个 必须放在最后书写,否则报错。不能放在前面,
}
xcode此时会报错,还有添加一个 requied方法,点击fixed解决,该方法是从nib加载调用的方法