2017-12-04 2 views
0

나는 아직도 이러한 모든 프로그래밍 개념을 이해하려고 노력하고 있으며 RGB RGB 색상의 간단한 UIView를 사용하고 있으며 여러 가지 다른보기에서이를 사용하고 있습니다.스위프트 (Swift) : 자주 사용되는 코드를 한 곳으로 넣어서 다시 사용하는 방법은 무엇입니까?

UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0 

하지만 (예를 들어 Colors.swift라고도 함) 하나의 신속한 파일을 만들 싶지만 거기에 내가하고 싶은 :

는 지금은 여전히 ​​하드 모든보기에 색을 코딩하고 모든 색상을 넣으십시오.

이제 모든 단일보기에서 필자는이 파일의 색을 얻고 싶습니다. 그래서 필자는 필 요한 경우 색을 변경하는 위치가 하나뿐입니다.

신속한 파일로 함수를 만들고 다른 곳에서 호출하는 방법을 알고 있습니다. 예를 들어 내가 다시 사용하는 모든 애니메이션은 하나의 파일에 저장되지만 그 색상으로는 정전이 발생합니다. 나는 그들을 다른 파일에 배치하고 거기에서 꺼내는 방법을 모른다. 완벽하게 다른 이름의 색상 (파란색, 녹색, ...)과 해당 rgb 값을 가진 스위치 케이스 일 수 있으므로 색상 이름을 호출하여 얻을 수 있습니다. 이것은 내가 만든 신속한 파일이 될 것입니다 :

import UIKit 

let myColors = UIColor() 

switch myColors { 
case .red: 
    UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0) 
case .gray: 
    UIColor(red: 120/255, green: 120/255, blue: 120/255, alpha: 1.0) 
default: 
    UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 1.0) 
} 

하지만 신속한 파일에 switch 문을 쓸 때 나는이 작업을 얻을 수 없습니다. 내가 얻는 오류는 입니다. "문은 최상위 레벨에서 허용되지 않습니다." 각 케이스에 오류 가 발생합니다. "UIColor 초기화 프로그램의 결과가 사용되지 않았습니다.",하지만 뭔가 안에 넣을 방법이 보이지 않습니까?

어쩌면 모든 접근 방식이 잘못되었을 수 있습니까?

+2

가능한 [UIColor 값으로 신속 열거 형을 만들 수 있습니까?] (https://stackoverflow.com/questions/39112879/how-can-i-make-a-swift-enum-with-uicolor- 가치) –

답변

4

이 기능에는 Swift Extensions를 사용할 수 있습니다.

// Colors.swift 
extension UIColor { 

    var myCustomRed: UIColor { 
     return UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0) 
    } 
} 

// elsewhere in the app 
view.backgroundColor = UIColor.myCustomRed 

사용자 정의 구현을 원하는만큼 배치 할 수 있습니다. 기존 색상과 충돌하는 이름을 사용하지 않도록주의하십시오.자세한 내용은

가 UPDATE 워드 프로세서 Swift Extensions Documentation 참조 : 반복적으로 사용하는 기능과 변수에 대한

enum ThemeColors: UIColor { 
    case red = UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0) 
    case blue = UIColor(red: 2/255, green: 51/255, blue: 120/255, alpha: 1.0) 
} 

view.backgroundColor = ThemeColors.red 
+0

감사합니다. 그게 효과적이지만, 그냥 함수형 프로그래밍의 개념을 더 배우기 위해 클래스에 넣기를 원했지만 UIColor의 확장은이 경우에 더 쉬운 것처럼 보입니다. – RjC

+1

클래스 사용은 객체 지향 프로그래밍으로 간주됩니다. 스위프트는이 유형의 것을 확장했습니다. 열거 형을 사용할 수 있습니다. 예를 들어 업데이트를 원하면 – Scriptable

+0

도와 주셔서 감사합니다. – RjC

1

클래스에 넣어야합니다.

class Colors: NSObject { 
    static let color: = UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0) 
} 

다음과 같이 사용 :

import Colors 

Colors.color 

당신도 당신의 열거 형을 정의 할 수 있습니다 당신은 클래스를 인스턴스화 할 필요가 없습니다 당신은 단순히 색상이 변수 고정 할 수 있습니다.

+0

고마워, 내가 찾고 있었던 것이었다. 이것은 열세를 만들려고 할 때 나는 "expected declaration"오류를 얻는다는 사실을 잘 알고 있습니다. – RjC

1

루트 클래스 NSObject 인이 하나 개 GlobalFunctions.swift 클래스를 확인하고 선언하여 여기에서 반복적으로 사용되는 변수와 함수

귀하의 경우 691,363,210

: - : GloablFunctions.swift에 대한 객체를 생성 할 필요가 없습니다

GlobalFunctions.redColor 
GlobalFunctions.greyColor 
GlobalFunctions.defaultColor 

import UIKit 

class GlobalFunctions: NSObject { 

    static let redColor = UIColor(red: 120/255, green: 51/255, blue: 2/255, alpha: 1.0 
    static let greyColor = UIColor(red: 120/255, green: 120/255, blue: 120/255, alpha: 1.0) 
    static let defaultColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 1.0) 
} 

당신은 같이 당신의 requiered보기 컨트롤러에서이 색상을 사용할 수 있습니다. static 변수로 선언했기 때문에 색상 객체에 직접 액세스 할 수 있습니다. 프로젝트에서 재귀 적으로 사용할 클래스 함수를 추가 할 수 있습니다.

관련 문제