【问题标题】:How use Objective-c method in my Swift Class如何在我的 Swift 类中使用 Objective-c 方法
【发布时间】:2023-09-17 05:50:02
【问题描述】:

你好,我想在我的 swift 类中使用这个方法,已经创建了标题,但我只能访问方法(setApiKey)。这是目标c中的代码

#import <Foundation/Foundation.h>

@class CLQResponseHeaders, CLQError;
@class CLQToken;

NS_ASSUME_NONNULL_BEGIN
@interface Culqi : NSObject

/**
 * gets singleton object.
 * @return singleton
 */
+ (Culqi *_Nonnull)sharedInstance;

+ (void)setApiKey:(NSString *_Nonnull)apiKey;

#pragma mark - Tokens

- (void)createTokenWithCardNumber:(NSString *_Nonnull)cardNumber
                              cvv:(NSString *_Nonnull)cvv
                  expirationMonth:(NSString *_Nonnull)expirationMonth
                   expirationYear:(NSString *_Nonnull)expirationYear
                            email:(NSString *_Nonnull)email
                         metadata:(NSDictionary * _Nullable)metadata
                          success:(void (^_Nullable)(CLQResponseHeaders *_Nonnull responseHeaders, CLQToken * _Nonnull token))success
                          failure:(void (^_Nullable)(CLQResponseHeaders *_Nonnull responseHeaders, CLQError * _Nonnull businessError, NSError * _Nonnull error))failure;

@end
NS_ASSUME_NONNULL_END

我的快速代码是

import Foundation
import UIKit

class RegisterController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //THIS METHOD CALL SUCCESS
        Culqi.setApiKey("")


    }

}

更新:setApiKey 方法是可访问的,发生的情况是我无法调用方法“createTokenWithCardNumber”

【问题讨论】:

  • 如果我的类是可访问的,会发生什么我不能访问这个方法(createTokenWithCardNumber)
  • @DacDevs 我想,这是您的实施 (.m) 文件代码。对?您需要将方法声明移动到 (.h) 头文件。
  • 是的,在我的实现文件中是对的,这段代码在objective-c中用于执行该方法,但在swift中不调用[[Culqi sharedInstance] createTokenWithCardNumber: }];
  • 文档在这里,github.com/culqi/culqi-ios

标签: ios objective-c swift xcode objective-c-swift-bridge


【解决方案1】:

在你的 Objective-C 类的头文件中声明你的函数/方法setApiKey

// Move following line/code to header file (.h) of your objective-c class
+ (void)setApiKey:(NSString *_Nonnull)apiKey;

您的方法createTokenWithCardNumber 是实例方法(不是类方法),您需要创建类的实例才能访问它。试试这个,

let c = Culqi()
c.createTokenWithCardNumber(#<your parameter arguments>#)

// or use shared instance
Culqi.sharedInstance().createTokenWithCardNumber(#<your parameter arguments>#)

【讨论】:

  • 感谢您的回答,但我已经创建了 Bridging-Header.h 文件并且正在正确导入该类
  • setApiKey 方法是可以访问的,但是我不能调用方法“createTokenWithCardNumber”
  • @DacDevs 更正的课程是什么?可以分享一下吗?