16

我已经获得了 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 上查看了似乎类似的错误线程,但无济于事。

4

1 回答 1

10

看到这一行,您正在使用 Swift 3。

img.draw(in: CGRect(x:x,y:y,width:newSize.width,height:newSize.height))

在 Swift 3 中,第一个参数也被视为具有参数标签。

在包括第一个标签在内的所有参数中建立一致的标签行为 (SE-0046)

您可以通过Command-click#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)];
于 2016-08-29T22:05:58.123 回答