programing

기존 개체에 확장자를 추가하는 Swift 파일의 이름을 지정하는 모범 사례는 무엇입니까?

closeapi 2023. 4. 16. 15:09
반응형

기존 개체에 확장자를 추가하는 Swift 파일의 이름을 지정하는 모범 사례는 무엇입니까?

언어 사양에 설명된 대로 확장자를 사용하여 기존 Swift 개체 유형에 확장자를 추가할 수 있습니다.

그 결과, 다음과 같은 확장을 작성할 수 있습니다.

extension String {
    var utf8data:NSData {
        return self.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
    }
}

그러나 이러한 확장자를 포함하는 Swift 소스 파일에 대한 최상의 명명 방법은 무엇입니까?

extendedtype+categoryname.mObjective-C 가이드에 설명된 바와 같이 Objective-C 유형의 경우.그러나 Swift 예제에는 카테고리 이름이 없으며, 이를 호출합니다.String.swift적절하지 않은 것 같아요

는 위와 같은 을 볼 때 상기 사항을 고려할 때Stringextension, swift source "swift source " " " " " extension extension 。

지금까지 본 대부분의 예는 Objective-C 접근방식을 모방하고 있습니다.위의 확장 예는 다음과 같습니다.

String+UTF8Data.swift

이름 지정 규칙을 사용하면 확장인지, 확장되는 클래스를 쉽게 이해할 수 있다는 장점이 있습니다.

「 」를 Extensions.swift또는 심지어StringExtensions.swift파일 이름을 보고 그 목적을 추론하는 것은 그 내용을 보지 않고서는 불가능하다는 것이다.

「」를 사용합니다.xxxable.swiftJava에서 사용하는 접근 방식은 메서드만 정의하는 프로토콜 또는 확장 기능에 적합합니다.에서는 Atribute가 Atribute가 하고 있습니다.UTF8Dataable.swift문법적으로도 말이 안 돼요

나는 가 있는 것이 더 좋다.+하고 있는 하기 위해: to확장、 to to 、 to to 、 to to 、 to to to to to 。

String+Extensions.swift

파일이 너무 크면 각 목적에 맞게 분할할 수 있습니다.

String+UTF8Data.swift

String+Encrypt.swift

스위프트 규약은 없습니다.심플화:

StringExtensions.swift

확장 중인 각 클래스에 대해 하나의 파일을 만듭니다.모든 확장자에 1개의 파일을 사용하면 순식간에 정글이 됩니다.

는 는는더 prefer prefer iStringExtensions.swift 까지.String+utf8Data.swift ★★★★★★★★★★★★★★★★★」String+Encrypt.swift.

또한 유사한 파일을 하나로 결합하면 빌딩 속도가 빨라집니다.최적화-스위프트-빌드 타임의 최적화」를 참조해 주세요.

제 코멘트를 곳곳에 붙이기보다는 하나의 답변으로 여기 있는 모든 코멘트를 표현하고 있습니다.

개인적으로, 저는 하이브리드 어프로치를 채택하여 뛰어난 사용성과 선명성을 제공함과 동시에 확장 중인 객체의 API 표면적을 복잡하게 만들지 않습니다.

예를 들어, 어떤 문자열에서도 사용할 수 있는 이 타당하다면,StringExtensions.swift를 들면, 「」와 같이trimRight() ★★★★★★★★★★★★★★★★★」removeBlankLines().

만약 내가 '', '보다'와 확장기능을 formatAsAccountNumber()'계정번호'는 자연스럽게 어떤 문자열에도 적용되지 않고 계정 컨텍스트에서만 의미가 있기 때문에 이 파일에 들어가지 않습니다.그 경우, 저는 '파일을 만듭니다'라는 파일을Strings+AccountFormatting.swift 어쩌면 ★★★★★★★★★★★★★★★★.Strings+CustomFormatting.swift a formatAsAccountNumber()실제로 포맷할 수 있는 유형/방법이 여러 개 있는 경우 기능합니다.

이 사용을 '이러다', '이러다'와 같은 .AccountNumberFormatter.format(String) 그것은 만질 수 StringAPI api 、 API api api api 。다만, 그 확장자를 사용하는 파일과 같은 파일에 정의했을 경우는 예외입니다만, 그 확장자는 독자적인 파일명을 가지지 않습니다.

팀이 합의한 공통 및 기타 확장 기능이 있는 경우 이를 Extensions.swift로 묶으면 Keep-It-Simple 1단계 솔루션으로 사용할 수 있습니다.그러나 복잡성이 증가하거나 확장이 더 복잡해지면 복잡성을 캡슐화하기 위한 계층이 필요합니다.이러한 상황에서는 예를 들어 다음과 같은 실천을 권장합니다.

.Server두 개의 다른 대상 앱을 커버할 수 있도록 점점 커지기 시작했습니다.큰 파일을 좋아하지만 논리적으로 확장자로 분할하는 사람도 있습니다.각각의 파일을 비교적 짧게 하는 것이 바람직하기 때문에, 이하의 솔루션을 선택했습니다. Server는 「」에 하고 있다.CloudAdapterProtocol이치노내가 한 일은 프로토콜을 계층으로 바꿔서 하위 프로토콜을 참조하게 한 것이다.

protocol CloudAdapterProtocol: ReggyCloudProtocol, ProReggyCloudProtocol {
    var server: CloudServer {
        get set
    }
    func getServerApiVersion(handler: @escaping (String?, Error?) -> Swift.Void)
}

»Server.swift

import Foundation
import UIKit
import Alamofire
import AlamofireImage

class Server: CloudAdapterProtocol {
.
.
func getServerApiVersion(handler: @escaping (String?, Error?) -> Swift.Void) {
.
.
}

Server.swift그런 다음 서버를 설정하고 API 버전을 가져오기 위해 코어 서버 API를 구현합니다.을 사용하다

Server_ReggyCloudProtocol.swift
Server_ProReggyCloudProtocol.swift

이들은 각각의 프로토콜을 구현합니다.

즉, 다른 파일(이 예에서는 Alarmofire용)에 Import 선언이 필요하지만, 내 관점에서는 인터페이스를 분리하는 것은 깨끗한 솔루션입니다.

이 접근방식은 자신의 클래스뿐만 아니라 외부에서 지정된 클래스에서도 동일하게 사용할 수 있다고 생각합니다.

왜 이게 토론이야?모든 서브클래스를 _Subclasses.swift라는 파일에 넣어야 합니까?전 그렇지 않다고 생각해요.Swift에는 모듈 기반 이름 간격이 있습니다.잘 알려진 Swift 클래스를 확장하려면 목적에 맞는 파일이 필요합니다.UIViewExtensions.swift라는 파일을 작성하는 대규모 팀을 둘 수 있습니다.이 파일은 개발자를 혼란스럽게 할 뿐만 아니라 구축되지 않는 프로젝트에서 쉽게 복제될 수 있습니다.Objective-C 명명 규칙은 잘 작동하며 Swift가 실제 이름 간격을 가질 때까지 사용하는 것이 가장 좋습니다.

언급URL : https://stackoverflow.com/questions/26319660/whats-the-best-practice-for-naming-swift-files-that-add-extensions-to-existing

반응형