Swift의 확장 : (초보자 가이드)

확장 기능은 무엇입니까?

유형을 확장하고 새로운 기능을 추가 할 수있는 신속한 기능입니다. 상속 대신 클래스에 새 메서드를 추가하는 데 많이 사용되고 놀라운 방법입니다 (많은 신속하고 Cocoa 라이브러리가 서브 클래 싱보다는 확장을 사용하여 구축 됨).

Swift book 에 따른 확장 :

확장은 기존 클래스, 구조, 열거 또는 프로토콜 유형에 새로운 기능을 추가합니다. 여기에는 원본 소스 코드에 대한 액세스 권한이없는 유형을 확장하는 기능이 포함됩니다 (소급 모델링이라고 함).

확장 기능을 사용하는 방법?

자동차 클래스가 있다고 가정 해 보겠습니다.

class Car {
    var color : UIColor?
    var model : String = ""
    var speed : Double = 0.0
}

extension Car {
    func goAhead() {
       speed += 1
    }
}

확장 프로그램은 언제 사용합니까?

대부분의 개발자는 다음 두 가지 상황에서 사용합니다.

1- 다른 사람이 작성한 유형 또는 라이브러리에서 작업 중이고 자신의 라이브러리에 새로운 기능을 추가하고 싶을 때 소스 코드에 액세스 할 수 없거나 코드가 오픈 소스 인 경우 엉망으로 만들고 싶지 않을 때.

extension String {
    var provideHey : String {
      return "Hey " + self
    }
}
"Mohamed".provideHey //Hey Mohamed

2- 독점 유형으로 작업하고 가독성과 확장 성을 달성하기 위해 기능을 섹션으로 나누고 싶을 때.

예를 들어 클래스가 프로토콜을 준수하고 프로토콜이 메서드를 구현하도록 강요하여 클래스 메서드와 함께 프로토콜의 필수 메서드를 사용하여 동일한 섹션에 작성하는 경우

//MARK: - Protocol Definition
protocol ID {
    func didHeGetTicket(clientAge : Int) -> Bool 
    func didEnterTheCinema( fc: () -> Bool ) -> String
}
//MARK: - Class Definition
class NewPerson : ID{
     var personName : String?
     var personAge : Int?
func getCoffe( fillTheCup : Bool) -> String {
         if fillTheCup {      
              return "Done!"
         }
         else {
            return "Ok"
        }
     }

//these methods are the protocol method
func didHeGetTicket(clientAge : Int) -> Bool {
          if clientAge >= 18 {
            return true
        }
        else {
            return false
       }
    }

   func didEnterTheCinema( fc: () -> Bool ) -> String {
        if fc() == true {
             return "Approved client have a seat"
        }
        else{
        return "Refused client sorry you must be +18"
      }
   }
}

그리고 그것은 읽을 수있는 코드가 아닙니다! . 이 문제를 해결하고 싶습니다. 어떻게 해결해야합니까?

여기에 예쁜 확장 기능이 사용되므로 클래스를 확장하고 프로토콜 메서드를 별도로 추가 할 것입니다.

//MARK: - Class Definition
class NewPerson{
    var personName : String?
    var personAge : Int?
func getCoffe( fillTheCup : Bool) -> String {
       if fillTheCup {
           return "Done!"
       }
      else {
           return "Ok"
       }
    }
}
//MARK: - Extend NewPerson
extension NewPerson : ID {
   func didEnterTheCinema( fc: () -> Bool ) -> String {
       if fc() == true {
            return "Approved client have a seat"
       }
       else{
           return "Refused client sorry you must be +18"
       }
   }
func didHeGetTicket(clientAge : Int) -> Bool {
       if clientAge >= 18 {
            return true
       }
       else {
           return false
       }
    }
}

여기서 우리는 코드를 작은 덩어리로 나누면 가독성을 높이고 오류 충돌을 피할 수 있으므로 오류가 방금 발생하면 쉽게 찾을 수 있습니다.

이제 여러분과 다른 개발자 또는 리뷰어가이 코드를 나중에 읽거나 리팩터링하는 것이 매우 쉬울 것입니다. 코드를 작은 덩어리로 나누면 코드 가독성이 충분히 향상됩니다!

UISearchBarDelegate, UITableViewDelegate 또는 클래스를 준수하는 다른 UI 프로토콜을 사용하고 일부 메서드를 구현하도록 강요하는 경우 클래스를 확장하고 newcomers 메서드를 별도로 추가하는 것이 좋습니다.

결론

확장은 코드 블록을 최소화하고 핵심 기능을 작은 처리 된 코드 청크로 나누는 신속한 기능이며 확장에는 더 많은 트릭과 추가 기능이 있습니다.

1- 확장에는 저장된 속성을 제공 할 수없는 계산 된 속성이 있습니다!

2- 확장 클래스는 상속과 마찬가지로 Protocols, Structures, Enumerations 및 클래스를 준수 할 수 있습니다.

3- 확장은 프로토콜에 대한 기본 구현을 만들 수 있습니다 (클래스를 특정 프로토콜에 따르고 항상 특정 함수를 사용하지 않는 경우 메서드 호출을 사용하지 않는 경우이 함수에 기본 구현을 연결할 수 있음).

4- Extension은 유형 추론을 인식하지 않으므로 변수 데이터 유형을 명시 적으로 입력해야합니다.

그것이 유용한 이야기를 발견하면 초보자 IOS 개발자로서 알고 싶은 확장에 관한 모든 것입니다.

피드백이나 메모가 있으시면 댓글을 달거나 저에게 메일 (helalhady16@gmail.com)을 보내 주시면 곧 연락을 드리겠습니다.

Suggested posts

UIKit-UIViewController 및 UIView 용 실시간 미리보기

UIKit-UIViewController 및 UIView 용 실시간 미리보기

Storyboard와 xib없이 프로젝트를 만드는 것은 절대적으로 가능하지만 때로는 프로그래밍 방식으로 UI 및 제약 조건을 관리하는 것이 어려울 수 있습니다. 따라서이를 수행하는 효과적인 방법은 무엇입니까? 이러한 제약, 크기 및 색상을 관리하기 위해 개발 시간을 단축 할 수 있습니까? 응 우리는 할 수있어.

Xcode 프로젝트 종속성 그래프 작성 — XCGrapher 소개

Xcode 프로젝트 종속성 그래프 작성 — XCGrapher 소개

최근 우리는 (많은) 사내 라이브러리를 CocoaPods에서 Swift Packages로 마이그레이션했습니다. 우리의 진행 상황에 대한 개요를 얻기 위해 새로운 도구를 구축 한 후 저에게 새로운 것을 배웠습니다. 런타임에 Swift 라이브러리를 동적으로로드하는 것입니다! 이것은 약간 더 긴 기사이므로, 식욕을 돋우기 위해 여기에 우리가 다룰 내용의 일부 목록이 있습니다. (때로는 매우 세부적으로) : 💡Module Migration Mayhem 10 개 이상의 커스텀 CocoaPod를 Swift 패키지로 옮기는 것은 까다로운 작업입니다. 특히 따라서 상호 의존적이며 세 개의 iOS / tvOS 앱 프로젝트에서 모두 사용됩니다.

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.