2016-12-01 16 views
3

스위프트 기능 :목표 - C 호출 스위프트 기능 <code>MySwift.swift</code> 파일에 정의

func SomeSwift() 
{ 

} 

SomeSwift() 어떤 스위프트 클래스에 정의되지 않은, 그냥 순수 기능입니다.

B CMD + 후에는 SomeSwift() 거기에 표시되지 않으며, Project-Swift.h 열려있는 프로젝트를 빌드합니다.

일부 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

이 목표 - C에서 스위프트를 사용하는 방법에 대한 Apple Documentation 참조 :

는 스위프트 클래스는 가 액세스 할 수 오브젝티브 C 클래스의 자손이어야하며, 다음과 같은

Objective-C에서 사용 가능

클래스가 @objc class SomeSwift: NSObject이어야 함을 의미합니다 (맞습니다!)하지만 스위프트 파일에 에게 모든 것을에 액세스 할 수 없습니다 :

당신이 목표 - C 클래스의 자손 인 스위프트 클래스를 만들 때, 클래스와 회원 - 속성, 메서드, 첨자 및 Objective-C와 호환되는 이니셜 라이저는 Objective-C에서 자동으로 을 사용할 수 있습니다. 같은 등이 제외 스위프트 전용 기능, 사람들은 여기에 나열 :

제네릭

에게

튜플

지능 원시 값 유형없이 스위프트에 정의

열거

구조를

스위프트에 정의

Swift에서 정의 된 최상위 함수

스위프트

에 정의 6,

전역 변수 Typealiases는

스위프트 스타일은

중첩 유형

카레 기능

Reference을 variadics 스위프트에 정의.

따라서 최상위 기능 SomeSwift을 사용할 수 없습니다.enter image description here

@objc

에만 사용 할 수있을 때 클래스의 멤버들, @objc 프로토콜 와 :

당신이 선언되기 전에 @objc를 추가하려고해도, 컴파일러는 그에게 말할 것이다 클래스의 구체적인 확장.

@objc을 삭제할 것을 제안합니다.