swift 3.0 怎么初始化button

swift 3.0 怎么初始化button,第1张

如果是Xcode用控件的方法,直接在StoryBoard添加button,然后你可以设置各种属性,比如Title标题、颜色、是否显示(isHidden)、是否能够点击(Enabled)等等,然后从最右侧栏目中的箭头将action用鼠标拖出一条直线拉到代码中,实现click事件。

如果希望直接在代码中生成动态的按钮,不采用UI设计,那么请参考下列代码(这里假定 *** 作系统为Mac。如果是iOS,请将NS开头的改为UI开头即可):

override func viewDidLoad() {

    super.viewDidLoad()

    

    let myButtonRect = CGRect(x: 10, y: 10, width: 100, height: 10)

    let myButton =  NSButton(frame: myButtonRect)

    view.addSubview(myButton)

    myButton.target = self

    myButton.action = Selector(printSomething())

    // Do any additional setup after loading the view.

}

在swift中方法调度分为两种, 直接调用 和 查找调用

struct 结构体的方法调用方式为 直接调用 ,直接调用函数地址

class 类的方法调用方式为 查找调用 ,函数都按照顺序存储在 vtable 中,需要偏移

效率上来讲应该是 直接调用 更快吧

举例说明,打开汇编调式面板

在swift中,写在 extension 中的方法是不能被继承的,因为也是直接调用,并不在 vtable 中,不可以被重写

在swift中,使用 final 修饰的方法和属性,也不会写入 vtable 中,子类不可重写,只可以调用

在button添加方法时 #selector ,编译器会提示我们使用 @objc 关键字

如果需要oc与swift混编,调用swift的类时,不仅是添加 @objc 关键字,还需要继承于 NSObjc

标记为 dynamic 的变量/函数会隐式的加上 @objc 关键字,它会使用OC的runtime机制,Swift 为了追求性能,Swift 类型的成员或者方法在编译时就已经决定,而运行时便不再需要经过一次查找,想要实现OC的方法交换或者kvo都需要要添加 dynamic 关键字


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11360547.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存