一: #import "項目名-Swift.h"的作用
其作用只要是混編時,在OC中使用Swift的類(方法和屬性)
二:項目名-Swift.h是干什么的?
按住commond+左鍵,我們可以點進去看看
里面,這么一大串東西,上面是一些宏,和導入的一些框架。
@interface的作用大家都知道,是引入一個類。那么咱們就先看看@interface
這時候,我只有一個Swift的類EnumTestView類,只@interface一個
我再創建一個Swift的類,咱們看看有幾個@interface
這是后,我又創建了一個名為SecondView的Swift的類。
這時候,咱們再去 項目名-Swift.h 中看看
可以看到,這里面有兩個@interface了。
然后,我再再Swift類里,分別寫一個屬性,一個方法。我是在SecondView這個類里寫的.
然后,咱們再去 項目名-Swift.h 中看看
在這里面多了一個方法,屬性沒有?咱們試試能調用這個屬性和方法。
方法可以正常調用,但是屬性提示,沒有發現這個類,有這個屬性。
咱們換種Swift的屬性的定義方法
這時候,咱們發現,再 項目名-Swift.h 有這個屬性了。
然后編譯一下,編譯通過
現在咱們再換另一種屬性的寫法
這種,給屬性添加一個set和get方法的寫法,同樣在 項目名-Swift.h 有這個屬性了,而且能夠編譯通過。
那么現在,咱們來總結下項目名-Swift.h 的作用。
1,其作用只要是混編時,在OC中使用Swift的類(方法和屬性)
2,再項目名-Swift.h中,項目中,所有的swift的類,都會被@interface其中,且其中合法的屬性和方法,也會添加到其中,并且顯示形式為OC代碼形式。
三:為什么var testProperty : NSInteger?;這種方式定義的屬性在OC中不能用,并且在 項目名-Swift.h 文件中沒有?
一下內容,僅是筆者猜測。
1,var testProperty : NSInteger?使用這種方式定義時,它是一個可選類型,不占內存,因此,再編譯時,它是不存在的。var testProperty = NSInteger()這種方式,它是占有內存的,所以可以。
2, 添加set和get方法,雖然var _testProperty : NSInteger?它是一個可選類型的,但是咱們外部用的并不是他,而是var testProperty:NSInteger它,它是_testProperty寫set和get方法,而且是必然有值的,
var testProperty:NSInteger{
set{
_testProperty = newValue;
}
get{
return _testProperty!;
}
}
在swift中是不可以這樣寫的,我把這個屬性改為String類型了。
在外部調用,會有一個警告,不能為null
咱們運行一下。是可以正常運行的,這里我想就是OC和Swift語言的差異了。
四:如何在OC使用Swift的枚舉。
相信大家,用過混編的都遇到過,Swift的枚舉,在OC中不能使用,很是苦惱。
現在咱們來寫一個枚舉
通過上面的研究,咱們知道了,只要 項目名-Swift.h 文件中有這個枚舉和屬性,咱們就能用,現在咱們去看看它里面有沒有。
在這里面,并沒有,那么現在怎么辦呢?
偶然間,一個朋友,在枚舉的前面寫了一個@objc 發現可以用了,在 項目名-Swift.h 文件中,也有這個枚舉和屬性了。
咱們再進行一個探討,我先在枚舉是Int類型,大家都知道,Swift中的枚舉,可以是String或者其他類型,現在咱們改下。
哎呦臥槽,使用@objc報錯,但是不使用@objc咱們就不能在OC中用啊。
通過觀察,咱們可以發現,OC中的枚舉,都是Int或者NSInterger類型,所以其它類型的枚舉,再OC中不能使用。
那么咱們總結下:
OC中使用Swift的枚舉,枚舉必須是Int或者NSInteger類型,且必須在枚舉之前加上@objc
‘
五:OC項目中導入#import "項目名-Swift.h"報錯
經過筆者的測試,項目名可以是中文,也可以包含數字,但不能包含點,如:TestDemo.Pro這樣的項目名,再引入#import "項目名-Swift.h"時會報錯。其它命名方式,在保證項目名合法,橋接文件正常的情況下,不會報錯。
如果你的項目因此而報錯了,請從以下幾方面入手。
1,檢查項目名是否合法
2,檢查項目名是否正確,不能有一絲一毫的錯誤
3,檢查橋接頭文件路徑是否正確,關于橋接投文件的用法,可參考本人的這篇文章:http://www.lxweimin.com/p/7c941d274f5a
如果是項目名不合法,造成的錯誤,要么你從新構建一個項目,合法命名。要么就是更改項目名。
如何更改項目名
本人也在網上搜到了一個很詳細的資料,在這里我就不寫了,只是給大家提供一個方便,連接在下面
http://jingyan.baidu.com/article/0964eca21126a98285f53625.html
以上僅是個人觀點,轉載請署名,謝謝。也歡迎大家和我一起探討,交流。
(以上為Xcode8即Swift3.0版測試)