微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift实际使用中遇到的问题及解决

好久没有更新博客了。一是,最近加班,懒了。二是,没东西可以去写,也就是最近没有去学习新的东西。4号,swift开源了。感觉是应该真正的去用一下。只有用了,才能快速的学习。所以,自己尝试着去用swift去写项目,而不是简单的print(”hello swift”)。

  1. 与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")
    }

今天就写到这吧,再碰到问题,再追加。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐