在本文中,我们将为您详细介绍在Swift中使用Objective-C方法似乎跨越了Swift语言的关键字的相关知识,并且为您解答关于swiftobjective-c的疑问,此外,我们还会提供一些关于i
在本文中,我们将为您详细介绍在Swift中使用Objective-C方法似乎跨越了Swift语言的关键字的相关知识,并且为您解答关于swift objective-c的疑问,此外,我们还会提供一些关于ios – 在Swift中覆盖Objective C类方法、ios – 如何在Swift中调用Objective-C类别方法、ios – 我应该在我的混合Objective-C / Swift项目中使用Realm Objective-C或Realm Swift吗?、objective-c – 在Swift中使用Obj-C完成块的有用信息。
本文目录一览:- 在Swift中使用Objective-C方法似乎跨越了Swift语言的关键字(swift objective-c)
- ios – 在Swift中覆盖Objective C类方法
- ios – 如何在Swift中调用Objective-C类别方法
- ios – 我应该在我的混合Objective-C / Swift项目中使用Realm Objective-C或Realm Swift吗?
- objective-c – 在Swift中使用Obj-C完成块
在Swift中使用Objective-C方法似乎跨越了Swift语言的关键字(swift objective-c)
我有一个objective-c方法:
-(DeviceVar *)var:(NSString*)valid
在Objective-C中,我简单地将其用作:
DeviceVar* rtc = [device var:@"rtc"];
但是我很快就使用这种方法遇到了问题:
let rtc = device.var("etc")
因为var是我猜的关键字,所以我的问题是如何使其工作。
答案1
小编典典如果需要将保留字用作方法名称,则可以始终将其保留在反引号中:
let rtc = device.`var`("etc")
如果您具有对Objective-C头文件的写访问权,那么另一种选择是为Swift定义一个不同的方法名称(在“将Swift与Cocoa和Objective-
C一起使用”参考中,比较同一项目中的Swift和Objective-C):
-(DeviceVar *)var:(NSString*)valid NS_SWIFT_NAME(deviceVar(_:));
然后可以从Swift调用为
let rtc = device.deviceVar("etc")
ios – 在Swift中覆盖Objective C类方法
我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.
该方法的签名是:
+(JSONKeyMapper*)keyMapper;
我怎样才能做到这一点?
解决方法
override class func keyMapper() -> JSONKeyMapper! { //code here }
ios – 如何在Swift中调用Objective-C类别方法
+(UIColor*)colorWithHexString:(Nsstring*)hex alpha:(float)alpha;
解决方法
如果您有ObjC方法(由自定义类别定义):
+ (UIColor *)colorWithHexString:(Nsstring *)hex alpha:(float)alpha;
编译器生成Swift声明:
convenience init(hexString: String?,alpha: CFloat)
你这样称呼它:
let color = UIColor(hexString: "#ffffff",alpha: 1.0)
在Swift 2.0或更高版本中,您可以使用NS_SWIFT_NAME宏将ObjC工厂方法与作为初始化程序的Swift的命名模式导入不匹配.例如.:
@interface UIColor(Hex) + (UIColor *)hexColorWithString:(Nsstring *)string NS_SWIFT_NAME(init(hexString:)); @end // imports as extension UIColor { init(hexString: String) }
ios – 我应该在我的混合Objective-C / Swift项目中使用Realm Objective-C或Realm Swift吗?
If you’re looking to use Realm from Objective-C,or from mixed Objective-C & Swift apps please see Realm Objective-C instead.
Using both Realm Objective-C and Realm Swift simultaneously is not supported.
解决方法
objective-c – 在Swift中使用Obj-C完成块
File.h
typedef void (^MYCompletionBlock)(BOOL success,NSDictionary *result,NSError *error);
然后,在Swift文件中,我尝试使用完成块,如下所示:
Swift.swift
class MyClass: NSObject{ ... func MyFunction() -> Void { ... objcmethod(param1,withCompletion: {(MYCompletionBlock) -> Void in if (success){ // Error:"Use of unresolved identifier 'success'" } } ... } ... }
但是,我一直收到一个错误:“使用未解析的标识符’成功’”.
我也尝试了以下内容:
objcmethod(param1,withCompletion: {(success:Bool,result: NSDictionary,error:NSError) -> Void in if (success){ // Error:"Cannot convert value of type '(Bool,NSDictionary,NSError) -> Void' to expected argument type "MYCompletionBlock!" } }
有人可以帮我理解如何在Swift中正确指定Obj-C完成块吗?
解决方法
因此,它将是:
obj.objcmethod(param) { (success: Bool,result: [NSObject : AnyObject]!,error: NSError!) in if success { // do something } }
或者,正如Kobi所指出的,您可以让编译器推断出类型:
obj.objcmethod(param) { success,result,error in if success { // do something } }
请注意,您不必自己记住这一点.输入代码时,您可以利用Xcode的代码完成.因此,键入足以匹配方法名称以及何时匹配objcmethod,然后按Enter键:
当你到达MYCompletionBlock时,再次按回车键,它会显示正确的签名:
如果这个Objective-C方法是我自己的类,我会审核它的可空性.因此,例如,让我们假设param是可选的,闭包是必需的,结果和错误是可选的,你可以这样定义它:
NS_ASSUME_NONNULL_BEGIN typedef void (^MYCompletionBlock)(BOOL success,NSDictionary * _Nullable result,NSError * _Nullable error); @interface MyObject : NSObject - (void)objcmethod:(NSDictionary * _Nullable)param1 withCompletionHandler:(MYCompletionBlock)completionHandler; @end NS_ASSUME_NONNULL_END
而且,如果是这种情况,您的Swift代码会像这样调用它:
obj.objcmethod(param) { (success: Bool,result: [NSObject : AnyObject]?,error: NSError?) in if success { // do something } }
或者,再次,让编译器为您推断类型(但这次它们被推断为未隐式解包的选项):
obj.objcmethod(param) { success,error in if success { // do something } }
关于在Swift中使用Objective-C方法似乎跨越了Swift语言的关键字和swift objective-c的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ios – 在Swift中覆盖Objective C类方法、ios – 如何在Swift中调用Objective-C类别方法、ios – 我应该在我的混合Objective-C / Swift项目中使用Realm Objective-C或Realm Swift吗?、objective-c – 在Swift中使用Obj-C完成块等相关内容,可以在本站寻找。
本文标签: