Mig*_*iro 12 objective-c language-interoperability ios swift
我已经获得了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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的Objective C .m文件中的代码:
imgBarCounter = [UIImage imageNamed:@"bar-counter-pd.png"];
self.image = [ImageBarSize changeContadorImageSize:imgBarCounter newSize:CGSizeMake(300, 300)];
Run Code Online (Sandbox Code Playgroud)
我得到错误"选择器没有已知的类方法'changeContadorImageSize:newSize:'".
我完成了整个桥接过程
#import <WHS_Live_2-Swift.h>
Run Code Online (Sandbox Code Playgroud)
在文件的开头,这一切似乎都运行正常.我已经在SO上查看了类似的错误线程,但无济于事.
看到这一行,您正在使用Swift 3。
img.draw(in: CGRect(x:x,y:y,width:newSize.width,height:newSize.height))
Run Code Online (Sandbox Code Playgroud)
在Swift 3中,第一个参数也被视为具有参数标签。
在所有参数(包括第一个标签)上建立一致的标签行为(SE-0046)
您可以通过在Command上单击#import <YourProjectName-Swift.h>来检查它们如何导出到Objective-C 。(您可能需要等到Xcode完成索引编制。)
在Xcode 8 beta 6中经过测试,您的类方法如下所示:
+ (UIImage * _Nonnull)changeContadorImageSizeWithImg:(UIImage * _Nonnull)img newSize:(CGSize)newSize;
Run Code Online (Sandbox Code Playgroud)
因此,您可能需要这样称呼它:
self.image = [ImageBarSize changeContadorImageSizeWithImg:imgBarCounter newSize:CGSizeMake(300, 300)];
Run Code Online (Sandbox Code Playgroud)
或者,您可以将Swift方法更改为:
static func changeContadorImageSize(_ img:UIImage, newSize:CGSize) -> UIImage{
Run Code Online (Sandbox Code Playgroud)
然后,您可以按原始格式进行调用:
self.image = [ImageBarSize changeContadorImageSize:imgBarCounter newSize:CGSizeMake(300, 300)];
Run Code Online (Sandbox Code Playgroud)