
如果是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 关键字
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)