Objective-c에서 일부 Swift 함수를 호출 할 수 없습니다 (다른 기능은 작동 함).

ZS

Objective-C에서 호출하는 방법을 테스트하기 위해 Swift에서 두 가지 다른 함수를 정의했습니다. 그중 하나는 작동하고 다른 하나는 작동하지 않습니다!

여기에 정의했습니다.

public extension UIViewController {
    func testAddingOperationTo(array: inout  [Operation]) -> Operation {
        let completionBlock = BlockOperation (block: {
            print("completionOperation")
        })

        return completionBlock;
    }

    func testSomethingWith (count: Int){
        print("testing something \(count)")
    }
}

Objective-C에서 올바른 헤더 파일을 가져 왔고 두 번째 메서드를 잘 호출 할 수 있습니다.

[self testSomethingWithCount:0];

그러나 첫 번째는 작동하지 않습니다 ... Xcode 자동 완성에 표시되지 않으며 수동으로 입력하더라도 빌드 오류가 발생합니다. 나는 이것을 다음과 같이 부르고 싶다.

NSOperation *completionOperation = [self testAddingOperationToArray: operationsList];

여기서 무엇이 잘못 되었습니까? 함수를 잘못 정의했거나 내가 모르는 Swift에 대한 모호한 규칙이 있습니까?

롭 메이 오프

@objcObjective-C의 메서드를 사용하고 싶다고 Swift 컴파일러에 알리기 위해 메서드 선언 앞에 넣을 수 있습니다 . 다른 효과 중에서도 어떤 이유로 인해 Objective-C에서 메서드를 호출 할 수없는 경우 컴파일러에서 오류가 발생합니다.

@objc func testAddingOperationTo(array:  [Operation]) -> Operation {
// Method cannot be marked @objc because the type of the parameter cannot be represented in Objective-C

컴파일러가 어떤 매개 변수의 유형이 표시되지 않는지 알려 주면 좋겠지 만 Xcode 9 베타 2에서는 그렇지 않습니다.

어쨌든이 경우의 문제 inout는 Objective-C에서 Swift 매개 변수를 표현할 수 없다는 것입니다. 매개 변수가 필요하지 않은 경우 inout해당 키워드를 제거하면 메서드가 Objective-C에 연결됩니다.

함수가 수정할 수있는 배열을 전달해야하는 경우 한 가지 방법은 NSMutableArray. 두 번째 버전은 Objective-C에 연결됩니다.

func testAddingOperation(to array: inout [Operation]) {
    let completionBlock = BlockOperation (block: {
        print("completionOperation")
    })
    array.append(completionBlock)
}

@objc func testAddingOperation(toOperations mutableArray: NSMutableArray) {
    var array = mutableArray.map({ $0 as! Operation })
    testAddingOperation(to: &array)
    mutableArray.replaceObjects(in: NSRange(location: 0, length: mutableArray.count), withObjectsFrom: array)
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

AWS Lambda 함수는 동일한 VPC에서 다른 Lambda 함수를 호출 할 수 없습니다.

분류에서Dev

if () 내부에서 다른 함수를 호출 할 수 없습니다.

분류에서Dev

반응 : 다른 파일에서 함수를 호출 할 수 없습니다.

분류에서Dev

다른 파일 (nodejs + express)에서 함수를 호출 할 수 없습니다.

분류에서Dev

Flutter는 다른 클래스에서 비동기 함수를 호출 할 수 없습니다.

분류에서Dev

njit'ed 함수 내부에서 numba 함수를 호출 할 수 없습니다.

분류에서Dev

다른 함수에서 함수를 호출 할 수 없습니다.

분류에서Dev

다른 두 함수 내에서 동일한 함수를 호출 할 수 있습니까?

분류에서Dev

포함 된 PHP 파일에서 함수를 호출 할 수 없습니다.

분류에서Dev

Swift에서 Objective-C 메서드를 호출 할 수 없습니다.

분류에서Dev

C DLL에서 함수를 호출 할 수 없습니다.

분류에서Dev

XMLParser와 같은 비동기 함수에서 Segue를 호출 할 수 없습니다.

분류에서Dev

내부에서 호출되는 다른 함수로 동일한 함수 호출

분류에서Dev

Swift에서 다른 함수의 매개 변수로 함수를 호출 할 수 있습니까?

분류에서Dev

Redux Toolkit을 사용하여 다른 감속기 함수 (동일한 슬라이스 내)에서 감속기 함수를 호출 할 수 있습니까?

분류에서Dev

함수 내부에서 메서드를 호출 할 수 없습니다.

분류에서Dev

동일한 PHP 페이지에서 동일한 함수를 두 번 호출 할 수 없습니다.

분류에서Dev

jQuery (function () {}) 외부에서 jQuery 함수를 호출 할 수 없습니다. 몸

분류에서Dev

C ++ gmock은 동일한 인수로 다른 함수를 호출합니다.

분류에서Dev

Flutter : 다른 파일에 정의 된 함수에서 Provider <T> .of (context)를 호출 할 수 없습니다. ProviderNotFoundException

분류에서Dev

동일한 서비스 내에서 다른 Angular 함수를 어떻게 호출 할 수 있습니까?

분류에서Dev

같은 클래스에서 함수를 호출 할 수 없습니다.

분류에서Dev

Firefox의 동일한 도메인 iframe에서 함수를 호출 할 수 없습니다.

분류에서Dev

Java에서 함수를 호출 할 수 없습니다

분류에서Dev

Pandas는 datetimeindex에서 함수를 호출 할 수 없습니다.

분류에서Dev

jquery 내에서 javascript 함수를 호출 할 수 없습니다.

분류에서Dev

Lua에서 함수를 호출 할 수 없습니다.

분류에서Dev

if 문 내에서 함수를 호출 할 수 없습니다.

분류에서Dev

Django : Javascript에서 Python 함수를 호출 할 수 없습니다.

Related 관련 기사

  1. 1

    AWS Lambda 함수는 동일한 VPC에서 다른 Lambda 함수를 호출 할 수 없습니다.

  2. 2

    if () 내부에서 다른 함수를 호출 할 수 없습니다.

  3. 3

    반응 : 다른 파일에서 함수를 호출 할 수 없습니다.

  4. 4

    다른 파일 (nodejs + express)에서 함수를 호출 할 수 없습니다.

  5. 5

    Flutter는 다른 클래스에서 비동기 함수를 호출 할 수 없습니다.

  6. 6

    njit'ed 함수 내부에서 numba 함수를 호출 할 수 없습니다.

  7. 7

    다른 함수에서 함수를 호출 할 수 없습니다.

  8. 8

    다른 두 함수 내에서 동일한 함수를 호출 할 수 있습니까?

  9. 9

    포함 된 PHP 파일에서 함수를 호출 할 수 없습니다.

  10. 10

    Swift에서 Objective-C 메서드를 호출 할 수 없습니다.

  11. 11

    C DLL에서 함수를 호출 할 수 없습니다.

  12. 12

    XMLParser와 같은 비동기 함수에서 Segue를 호출 할 수 없습니다.

  13. 13

    내부에서 호출되는 다른 함수로 동일한 함수 호출

  14. 14

    Swift에서 다른 함수의 매개 변수로 함수를 호출 할 수 있습니까?

  15. 15

    Redux Toolkit을 사용하여 다른 감속기 함수 (동일한 슬라이스 내)에서 감속기 함수를 호출 할 수 있습니까?

  16. 16

    함수 내부에서 메서드를 호출 할 수 없습니다.

  17. 17

    동일한 PHP 페이지에서 동일한 함수를 두 번 호출 할 수 없습니다.

  18. 18

    jQuery (function () {}) 외부에서 jQuery 함수를 호출 할 수 없습니다. 몸

  19. 19

    C ++ gmock은 동일한 인수로 다른 함수를 호출합니다.

  20. 20

    Flutter : 다른 파일에 정의 된 함수에서 Provider <T> .of (context)를 호출 할 수 없습니다. ProviderNotFoundException

  21. 21

    동일한 서비스 내에서 다른 Angular 함수를 어떻게 호출 할 수 있습니까?

  22. 22

    같은 클래스에서 함수를 호출 할 수 없습니다.

  23. 23

    Firefox의 동일한 도메인 iframe에서 함수를 호출 할 수 없습니다.

  24. 24

    Java에서 함수를 호출 할 수 없습니다

  25. 25

    Pandas는 datetimeindex에서 함수를 호출 할 수 없습니다.

  26. 26

    jquery 내에서 javascript 함수를 호출 할 수 없습니다.

  27. 27

    Lua에서 함수를 호출 할 수 없습니다.

  28. 28

    if 문 내에서 함수를 호출 할 수 없습니다.

  29. 29

    Django : Javascript에서 Python 함수를 호출 할 수 없습니다.

뜨겁다태그

보관