无法在 Cpp 中使用互操作访问 Swift 扩展方法

问题描述 投票:0回答:1

我有一个实现新互操作机制的项目,我能够直接从 swift 成功调用 swift 类方法。但是,当我尝试调用 swift 扩展方法时,它会产生错误:“InteropExtension::SwiftCode”中没有名为“GetExtData”的成员

下面是我的cpp代码:

#include "CppSource.hpp"
#include "InteropExtension-Swift.h"

void CppSource::CppToSwiftCall()
{
    // successfull call
    InteropExtension::SwiftCode::GetClassData();
    
    //Below call is causing error. Why is swift extension method not invoked?
    InteropExtension::SwiftCode::GetExtData();

}

下面是我的快速代码:

import Foundation


public class SwiftCode {
    
    public static func GetClassData () -> String
    {
        return "classMethod"
    }
        
}

extension SwiftCode {
    
    public static func GetExtData () -> String
    {
        return "ExtMethod"
    }
}

有人可以帮忙解释为什么扩展方法没有被调用,以及如何调用它吗?

c++ swift interop
1个回答
0
投票

不直接支持从 C++ 调用 Swift 扩展方法。您必须通过 Swift 类本身中的常规方法公开它们,或者提供从 Swift 到 C++ 的桥梁。 你可以在 swift 类中提供这样的方法

import Foundation

public class SwiftCode {

public static func GetClassData () -> String {
    return "classMethod"
}

public static func GetExtData () -> String {
    return "ExtMethod"
}

// You can also provide a method that explicitly calls the extension method.
public static func CallGetExtData() -> String {
    return GetExtData()
}

}

© www.soinside.com 2019 - 2024. All rights reserved.