美文网首页
swift-基础知识

swift-基础知识

作者: 精神病患者link常 | 来源:发表于2018-09-12 18:52 被阅读9次

声明组件

 override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(self.abcview)
    }
    
    private lazy var abcview:UIView = {
        let abcview=UIView();
        abcview.backgroundColor=UIColor.red
        abcview.frame=CGRect(x: 100, y: 100, width: 100, height: 100)
        return abcview
    }()

新建子组件


class MyLoginIconView: LPBaseView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.addSubview(self.iconImageView)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()

        self.iconImageView.frame=CGRect(x: 100, y: 100, width: 100, height: 100);
    }
    private lazy var iconImageView:UIImageView = {
        let iconImageView = UIImageView();
        iconImageView.backgroundColor=UIColor.red
        return iconImageView
    }()
}

自定义构造方法

    var isShowRight: Bool?
    
    override init(frame: CGRect) {
        super.init(frame: frame) // 65
        
    }
    
    // 自定义构造方法
    convenience init(isShowRight: Bool) {
        self.init()
        self.isShowRight = isShowRight
        self.addSubViews()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    

声明协议

@objc protocol MyLoginViewDelegate {
    // 忘记密码
    func forgetPsdAction()
    // 登录
    func loginAction()
    // 验证码登录/注册
    func phoneCodeAction()
}

在ViewCtroller中实现协议方法

extension MyLoginViewController : MyLoginViewDelegate {
    func loginAction() {
    }
    
    func forgetPsdAction() {
        
    }
    
    func phoneCodeAction() {
        
    }
}

声明block

//定义一个block
typealias blocktype = (_ text:String)->Void

// 声明block
var block:blocktype?

if block != nil{
   block!("block传的值")

self.phoneView.block = {(text:String) in
   self.message.text = text
}

UIButton 添加点击事件

forgetBtn.addTarget(self, action:#selector(forgetPsdAction), for: UIControlEvents.touchUpInside)

@objc private func forgetPsdAction() {
}

swift block循环引用

使用 weakSelf


weak var weakSelf = self
self.phoneView.textChangeBlock = {(text:String) in
    weakSelf.userName = text
}

简便写法

self.phoneView.textChangeBlock = {[weak self](text:String) in
    let strongSelf = self
    strongSelf?.userName = text
}

在 swift 中,要解除闭包的 循环引用,可以在闭包定义中使用 [unowned self] 或者 [weak self],其中:

[unowned self] 类似与 OC 中的 unsafe_unretained,如果对象被释放,仍然保留一个 无效引用,不是可选项

[weak self] 类似与 OC 中的 __weak,如果对象被释放,自动指向 nil,更安全

[weak self] 时时监控性能较差,[unowned self]可能导致野指针错误,如果能够确定对象不会被释放,尽量使用 unowned

监听输入框值得变化

textField.addTarget(self, action: #selector(textChangeActon), for: .allEditingEvents)

相关文章

网友评论

      本文标题:swift-基础知识

      本文链接:https://www.haomeiwen.com/subject/kubygftx.html