作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我已经获得了 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 上查看了类似的错误线程,但无济于事。
最佳答案
看到这一行,你正在使用 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)];
关于ios - 在 Objective-c 上使用静态 Swift 方法时出现 "No known class method for selector",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39215676/
我是一名优秀的程序员,十分优秀!