기존 swift 클래스의 카테고리를 만들고 싶지만 IDE에 그렇게 할 수있는 옵션이 없습니다.
카테고리가 신속한 프로젝트에 존재하는지 여부를 알 수 있습니까? 아니면 신속한 프로젝트에서 유사한 기능을 달성하는 방법은 무엇입니까?
답변:
Swift에서는 Extensions
기존 클래스, 구조체 및 열거 유형에 새 기능을 추가 하는 데 사용할 수 있습니다.
주로 다음과 같은 몇 가지면에서 Objective-C 범주와 다릅니다.
현재 상태에서 Extensions는 다음을 수행 할 수 있습니다.
확장을 선언하는 기본 구문은 다음과 같습니다.
extension SomeType {
// new functionality to add to SomeType goes here
}
Swift에서 확장 기능을 사용하는 방법에 대한 자세한 정보는 Apple의 문서 를 확인하십시오 .
Objective C에서는 카테고리 라고 했지만 Swift에서는 확장 이라고 합니다 . 둘 다의 목적은 하위 클래스를 만들지 않고도 기존 클래스에 추가 기능을 제공하는 것입니다.
문서에서 확장에 대해 읽었지만 이 튜토리얼 비디오 ( YouTube 버전 , github 소스 )를보기 전까지는 프로젝트에서 확장 기능을 사용하는 방법을 이해하지 못했습니다 .
다음은이를 수행하는 방법에 대한 비디오에서 가져온 요약입니다.
프로젝트 네비게이터를 마우스 오른쪽 버튼으로 클릭하고 "새 파일 ..."을 선택합니다.
"Swift 파일"을 선택합니다.
규칙은 파일 이름을 확장하려는 클래스 이름과 함께 수행중인 작업 ( "+"기호 사용)으로 저장하는 것입니다. 예 : "UIImage + Cropping".
방금 만든 새 Swift 파일을 엽니 다.
을 확장하는 경우 UIKit
(대신 Foundation
) 가져와야 합니다 UIView
. 그런 다음 extension
확장하려는 클래스 이름 앞에 키워드를 사용하십시오 . 그런 다음 클래스에 고유 한 새 메서드를 추가 할 수 있습니다. (확장은 기존 메서드를 재정의하는 것이 아니라 새 메서드를 추가하기위한 것이므로 이름입니다.)
비디오에서 예제는 이미지에서 원을 자르고 테두리를 제공하는 방법을 추가하는 것입니다.
import UIKit
extension UIImage {
func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage {
// code to create the cropped circle with colored border
return newImage
}
}
이제 표준 클래스의 일부인 것처럼 코드의 모든 위치에서 해당 클래스에 대한 새 메서드를 사용할 수 있습니다.
다음은 비디오의 예입니다 ( github ).
import UIKit
class ViewController: UIViewController {
@IBOutlet var imageView : UIImageView = nil
override func viewDidLoad() {
super.viewDidLoad()
let img = imageView.image
imageView.image = img.cropToCircleWithBorderColor(UIColor(red:0.91, green:0.34, blue:0.16, alpha:1.00), lineWidth: 20)
}
}
이 방법 cropToCircleWithBorderColor
은의 표준 부분은 UIImage
아니지만 보시다시피 예전처럼 사용됩니다.
기존 클래스에서 다음 코드를 사용할 수 있습니다.
extension name{
func funcName(){
}
}
extension
.