2016-08-29 2 views
2

Objective C 코드가 주어 졌으므로 추가 기능을 추가해야합니다. 나는 Objective C에 익숙하지 않아서 스위프트에서 할 수있는 일 중 가장 많은 일을하는 것이 나를 위해 매우 적합 할 것입니다.Objective-C에서 정적 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; 
    } 
} 

그리고 이것은 내 목표 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> 

를 가지고 있고, 모든 것이 잘 작동하는 것 같군. 나는 여기에 비슷한 오류 스레드와 비슷한 것처럼 보였지만 아무 소용이 없습니다.

+0

Objective-C 코드의 출처는 무엇입니까? – WMios

답변

3

스위프트 3에서 당신은 스위프트 3

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

사용하고,이 줄을보고, 첫 번째 매개 변수는 인수 라벨을 가진 것으로 취급된다.

Establish consistent label behavior across all parameters including first labels (SE-0046)

그들이 #import <YourProjectName-Swift.h>명령 클릭하여 오브젝티브 C에 수출하는 방법을 확인할 수 있습니다. (. 당신은 엑스 코드는 인덱싱을 완료까지 기다려야 할 수도 있습니다)

은 엑스 코드 8 베타 6에서 테스트, 수업 방법은 다음과 같이된다 :

+ (UIImage * _Nonnull)changeContadorImageSizeWithImg:(UIImage * _Nonnull)img newSize:(CGSize)newSize; 

을 그래서, 당신은 다음과 같이 호출해야 할 수도 있습니다

원래의 형태로 호출 할 수 있습니다 그리고

static func changeContadorImageSize(_ img:UIImage, newSize:CGSize) -> UIImage{ 

: 당신이 스위프트 방법을 변경할 수 있습니다

self.image = [ImageBarSize changeContadorImageSizeWithImg:imgBarCounter newSize:CGSizeMake(300, 300)]; 

또는

self.image = [ImageBarSize changeContadorImageSize:imgBarCounter newSize:CGSizeMake(300, 300)]; 
+0

아아, 알 겠어! 그 링크와 설명에 대해 대단히 감사합니다. 지금 이해합니다. #import를 Command + 클릭하는 것은 나에게 매우 유용한 무언가이기 때문에 나는 그것이 존재했는지 전혀 몰랐다. 다시 한번 감사드립니다. c : –

+0

1 년 후, 적어도 Xcode 8.3.3에서, 에 대해 Command + Click이 작동하지 않습니다. 그러나 클래스 이름을 내 코드에 추가 한 다음 클래스 이름을 Control 또는 마우스 오른쪽 단추로 클릭 한 다음 "정의로 이동"을 선택하면 코드화 된 버전이나 파생 된/생성 된 버전으로 이동하는 옵션이 표시됩니다 . 나중에는 종종 몇 가지 신비를 정리합니다. –

관련 문제