好久没有更新博客了。一是,最近加班,懒了。二是,没东西可以去写,也就是最近没有去学习新的东西。4号,swift开源了。感觉是应该真正的去用一下。只有用了,才能快速的学习。所以,自己尝试着去用swift去写项目,而不是简单的print(”hello swift”)。
与OC混合编程
如果,你打算使用swift写代码,而其他的小伙伴还停留在OC上,你就必须掌握如何与OC一起编程,特别是OC调用swift,对此处是有两个问题:
一、OC调用swift
这个工程建立的时候,是选择使用OC建立。这个也是非常普遍的现象,比如,你打算在现有的工程上使用swift,那么你就要掌握这个技巧。
1>、OC使用类需要导入头文件,swift没有头文件,这是用你需要导入系统帮你生产的这个即可
#import "工程名-swift.h"
2>、OC调用swift方法,因为OC是消息机制的。
只需要把在需要调用的swift类的最前面,放到@objc(className)里面。
二、swif调用OC
在工程中创建“工程名-Bridging-Header”文件,然后,导入你需要调用的OC类名即可。
2. 加载nib文件。
此处还是分为两个OC调用swift加载nib文件和swift加载nib文件。当然,我自己的写法不规范,但是在纯OC并没有问题也就没去修改。
1>、OC调用swift加载nib文件
MyViewController *v = [[MyViewController alloc] init];
之所以提出这个,是因为我碰到一个很奇怪的问题。本来这个不应该是问题。具体问题是:在模拟器上一切正常,但是在真机上,iOS9没有问题,其他版本是空白。
改为:
MyViewController *v = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
或者直接:
只需要把在需要调用的swift类的最前面,放到@objc(className)里面。
就可以了。
2>、swift加载加载nib文件
还是上边描述的问题。这个主要是swift默认不集成父类的初始化方法。需要我们自己重写。
override init(nibName nibNameOrNil: String?,bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil,bundle: nibBundleOrNil)
}
// 编译器提示需要加入的代码
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
今天就写到这吧,再碰到问题,再追加。