在 Objective-c 上使用静态 Swift 方法时,“选择器没有已知的类方法”
Posted
技术标签:
【中文标题】在 Objective-c 上使用静态 Swift 方法时,“选择器没有已知的类方法”【英文标题】:"No known class method for selector" when using static Swift method on Objective-c 【发布时间】:2016-08-29 21:44:50 【问题描述】:我已经获得了 Objective C 代码,我需要向它添加额外的功能。我对 Objective C 非常不熟悉,所以在 Swift 上尽我所能对我来说是非常理想的。
这是我的 Swift 文件/类:
import Foundation
import UIKit
@objc class ImageBarSize: NSObject
static func changeContadorImageSize(img:UIImage, newSize:CGSize) -> UIImage
UIGraphicsBeginImageContextWithOptions(newSize, true, 0.0)
let x:CGFloat = 0
let y:CGFloat = 0
img.draw(in: CGRect(x:x,y:y,width:newSize.width,height:newSize.height))
let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage;
这是我的 Objective C .m 文件中的代码:
imgBarCounter = [UIImage imageNamed:@"bar-counter-pd.png"];
self.image = [ImageBarSize changeContadorImageSize:imgBarCounter newSize:CGSizeMake(300, 300)];
我收到错误“选择器'changeContadorImageSize:newSize:'没有已知的类方法”。
我完成了整个桥接过程,我已经
#import <WHS_Live_2-Swift.h>
在文件的开头,一切似乎都运行良好。 我已经在 SO 上查看了似乎类似的错误线程,但无济于事。
【问题讨论】:
Objective-C 代码的来源? 【参考方案1】:看到这一行,您正在使用 Swift 3。
img.draw(in: CGRect(x:x,y:y,width:newSize.width,height:newSize.height))
在 Swift 3 中,第一个参数也被视为具有参数标签。
Establish consistent label behavior across all parameters including first labels (SE-0046)
您可以通过Command-点击#import <YourProjectName-Swift.h>
来检查它们是如何导出到Objective-C的。 (您可能需要等到 Xcode 完成索引。)
在 Xcode 8 beta 6 中测试,你的类方法变成这样:
+ (UIImage * _Nonnull)changeContadorImageSizeWithImg:(UIImage * _Nonnull)img newSize:(CGSize)newSize;
所以,你可能需要这样称呼它:
self.image = [ImageBarSize changeContadorImageSizeWithImg:imgBarCounter newSize:CGSizeMake(300, 300)];
或者,您可以将 Swift 方法更改为:
static func changeContadorImageSize(_ img:UIImage, newSize:CGSize) -> UIImage
那么你可以像原来的形式那样调用它:
self.image = [ImageBarSize changeContadorImageSize:imgBarCounter newSize:CGSizeMake(300, 300)];
【讨论】:
啊,我明白了!非常感谢您的链接和解释,我现在明白了。 #import 上的 Command+Click 对我来说也非常有用,我不知道它存在!再次感谢 c: 一年后,至少在 Xcode 8.3.3 中,Command+Click on #import 不起作用,至少对我来说,对于以上是关于在 Objective-c 上使用静态 Swift 方法时,“选择器没有已知的类方法”的主要内容,如果未能解决你的问题,请参考以下文章
在自定义 Swift 框架中的 Objective-C 文件上使用 Swift
在 Swift/Objective-c 中按媒体类型自定义图像选择器