2016-10-09 3 views
1

최근에 나는 Extensions에 중독되었습니다. 등 내가이 Array처럼 뭔가 유용한 방법을 은닉 곳에 거대한 피타가 파악되는 것으로 발견 한 것은, NSManagedObject스위프트 확장 프로그램의 우수 사례

내가 NSObject 클래스 파일 내 확장을 넣어했던 어떤

CustomExtensions라고 거기에 알파벳 순서로 클래스 확장을 나열합니다.

그것은 작동하지만, 모범 사례에 맞춰 나도보고 싶어요. 그렇지 않은 경우 Extensions을 추적하는 가장 좋은 방법은 무엇입니까?

는 여기에 내가 무슨 짓을했는지의 :

class CustomExtensions: NSObject { 
    /* 
    Useful extensions, nothing else here 
    */ 
} 
// Example extension  
extension Int { 
    func formatAsTimeString() -> String { 
     let seconds = self % 60 
     let minutes = (self/60) % 60 
     let hours = self/3600 
     let stringHours = hours > 9 ? String(hours) : "0" + String(hours) 
     let stringMinutes = minutes > 9 ? String(minutes) : "0" + String(minutes) 
     let stringSeconds = seconds > 9 ? String(seconds) : "0" + String(seconds) 

     if hours > 0 { 
      return "\(stringHours):\(stringMinutes):\(stringSeconds)" 
     } 
     else { 
      return "\(stringMinutes):\(stringSeconds)" 
     } 
    } 
} 
// More extensions below 
+0

확장자 *를 'NSObject'에 넣었다는 것은 무엇을 의미합니까? 'Array' 확장은 다른 클래스에서 * 사용해서는 안됩니다. 예를 들어 ... –

+0

@DanielT. 읽어 주셔서 감사합니다. 내가 한 일을 볼 수 있도록 내 대답을 업데이트했습니다. – Adrian

+0

예제를 기반으로, 나는이 'CustomExtensions' 클래스가 무엇을위한 것인지 아직도 이해하지 못한다. 당연히 하위 클래스로 분류하지 않습니까? –

답변

3

나는이 문제를 중심으로 "모범 사례"아직 파악 된 생각하지 않습니다. 즉 여기 MHO입니다 말했다

가 궁극적으로 내가 이러한 확장을 나는 결국 C에서 전역 함수를 수행 같은 방식으로 취급, 즉 그들이 무엇 기본적입니다. 확장은 하나 개의 파일에 사용하는 경우 특별한 문법 ...

글로벌 함수는 다음 나는 같은 파일 확장자를 넣어 것입니다. 나는 끝날 때까지 이들 중 상당수가 끝납니다. 예를 들어, formatAsTimeString은보기 모델 종류의 것입니다. 단일보기 컨트롤러에서 사용하는 경우보기 컨트롤러의 파일에 그대로 두었습니다. 확장이 여러 클래스에 의해 사용되는

경우에, 나는 별도의 파일로 탈출합니다. 확장 후에 파일의 이름을 지정하겠습니다. 예를 들어, formatAsTimeString이 여러 파일에 사용되는 경우 확장명을 저장할 수있는 "Int + formatAsTimeString.swift"와 같은 파일을 갖게됩니다.

관련 기능의 숫자가있는 경우에, 나는 동일한 파일에 함께 넣어 함수의 추상적 인 아이디어를 기반으로 파일 이름을 것입니다. 나는

+0

굉장한 생각. 이 방법론을 사용하여 앱 내에서 'UserDefault' 값을 검색하기 시작했으며 다른 것들을 거기에 던지기 시작했습니다. 이런 식으로 일을 멀리하기 전에 나는 약간의 정보를 얻고 싶었다. 당신의 사려 깊은 대답에 감사드립니다. – Adrian

0

와 함께 ... 기능은 내가 다른 프로그램에서 사용하도록 선택하는 경우 그들은 모두 ... 함께 이동되어야 할 것이다 예를 들어, 어쩌면 내가 다른 시간 문자열 관련 기능을 가지고 있는지 상상에 의해 관련이 있다는 결정 Swift3, 확장자가 하나의 파일에서만 사용되는 경우 일반적으로 'fileprivate'를 사용하는 경향이 있습니다.

fileprivate extension Date 
{ 
    func toString(dateFormat format : String) -> String 
    { 
     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = format 
     return dateFormatter.string(from: self) 
    } 
}