2016-12-01 73 views
3

斯威夫特功能:Objective-C的通話斯威夫特功能<code>MySwift.swift</code>文件中定義

func SomeSwift() 
{ 

} 

SomeSwift()未在任何斯威夫特類中定義的,它僅僅是一個純粹的功能。

B之後CMD + 建設項目,開放Project-Swift.hSomeSwift()沒有在那裏表演。

Swift中的函數是否需要在某些Swift類中定義?並用@objc標記?

類似如下:

@objc class SomeSwift: NSObject { 
    func SomeSwift() 
    { 

    } 
} 
+0

不支持頂級函數:https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4 -ID35 – jtbandes

回答

5

參照Apple Documentation有關從目標C使用夫特:

迅速類必須是一個Objective-C類的後代是 訪問和可用Objective-C

意味着你的班級應該是@objc class SomeSwift: NSObject(你是對的! ),但你不能訪問斯威夫特文件整件事

當您創建從Objective-C類下降的雨燕類, 類及其成員的屬性,方法,下標,和與Objective-C兼容的初始值設定項自動從Objective-C獲得 。此排除夫特獨有特性,如 這裏列出:

泛型

元組

在夫特定義而不詮釋原始值類型

枚舉

結構在夫特

定義

Swift中定義的頂層函數

在斯威夫特

定義個

全局變量類型別名斯威夫特定義

斯威夫特式variadics

嵌套類型

咖喱功能

Reference

因此,您不能使用頂級功能SomeSwift

即使你試過它的聲明之前添加@objc,編譯器會告訴:

enter image description here

@objc只能使用時與 類承包商,客人,@objc協議和類的具體擴展。

建議刪除@objc