Swift 기초 문법 - 구조 체, 구조 함수, (시스템 구조 체) 확장 함수, 값 유형

7662 단어
지식 점
  • 기본 개념
  • 구조 체 의 기본 사용
  • 구조 체 구조 기 (구조 함수 / 구조 방법)
  • 구조 체 확장 함수 (방법) 를 구성원 방법
  • 이 라 고도 부른다.
  • 구조 체 는 값 유형
  • 1. 기본 개념
    1.1 개념 소개
  • 구조 체 (struct) 는 같은 유형 이나 서로 다른 유형의 데이터 로 구 성 된 일련의 데이터 집합
  • 이다.
  • 구조 체 (struct) 는 일종 의 데이터 구조
  • 를 말한다.
  • 구조 체 는 값 유형 이 고 방법 에서 전달 할 때 값 전달
  • Swift 의 구조 체 는 하나의 유형 으로 속성 과 함수 (심지어 구조 함수 와 석조 함수 등)
  • 를 정의 할 수 있다.
  • 구조 체 의 형식
  • struct       {
                
    }
    

    2. 구조 체 의 기본 사용
    2.1 Swift 가 하나의 구조 체 나 클래스 를 예화 할 때 모든 구성원 변 수 는 초기 값 이 있어 야 합 니 다.
  • 구조 체 의 속성 이 기본 값 이 있 으 면 직접 사용 () 구조 체
  • 를 예화 할 수 있다.
    //            ,           ()       
    struct Rect {
        var width:Double = 0.0  //                
        var height:Double = 0.0
    }
    var r = Rect() //                 ()       
    print("width = \(r.width) height = \(r.height)")
    //    : width = 0.0 height = 0.0
    
  • 구조 체 의 속성 이 기본 값 이 없 으 면 일일이 구조 체
  • 를 사용 해 야 한다.
    //              ,                
    struct Rect {
        var width : Double
        var height : Double
    }
    //                  
    var r = Rect(width: 10, height: 20)
    print("width = \(r.width) height = \(r.height)")
    //    : width = 10.0 height = 20.0
    
  • 구조 체 속성의 방문 사용 점 . 문법
  • struct Rect {
        var width:Double = 0.0
        var height:Double = 0.0
    }
    
    var r = Rect()
    r.width = 100
    r.height = 99
    print("width = \(r1.width) height = \(r1.height)")
    //    : width = 100.0 height = 99.0
    
  • 시스템 구조 체 의 생 성 방식
  • // (CGPoint/CGSize/CGRect)
    let point = CGPointMake(100, 100)
    let point1 = CGPoint(x: 100, y: 100)
    let size = CGSizeMake(100, 100)
    let size1 = CGSize(width: 100, height: 100)
    let rect = CGRectMake(100, 100, 100, 100)
    let rect1 = CGRect(x: 0, y: 0, width: 0, height: 0)
    

    3. 구조 체 구조 기 (구조 함수 / 구조 방법)
  • Swift 의 구조 체 와 클래스 는 다른 대상 언어 와 마찬가지 로 구조 함수 가 있 고 OC 는 없다
  • Swift 가 하나의 구조 체 나 종 류 를 예화 하 라 고 요구 할 때 모든 구성원 변 수 는 초기 값 이 있어 야 합 니 다.
  • 구조 함수 의 의 미 는 모든 구성원 변 수 를 초기 화 하 는 데 사용 되 는 것 이지 메모리 배분 이 아니 라 시스템 이 해 주 는 것 입 니 다.
  • 구조 체 의 모든 속성 이 기본 값 이 있 으 면 () 구조 체
  • 를 예화 할 수 있다.
  • 구조 체 의 속성 이 기본 값 이 없 으 면 구조 기 를 사용자 정의 하고 구조 기 에서 모든 속성 에 값 을 부여 할 수 있 습 니 다
  • 사실 구조 체 는 기본 적 인 구조 기 를 가지 고 초기 화 할 때 모든 속성 에 값 을 부여 합 니 다
  • .
    3.1 기본 구조 체 구조 기 (함수 / 방법)
    struct Rect2 {
        var width:Double
        var height:Double = 0.0
    }
    //     
    var r2 = Rect2(width: 10.0, height: 10.0);
    //    ,                 
    var r2 = Rect2(height: 10.0, width: 10.0);
    //    ,         
    var r2 = Rect2(height: 10.0);
    

    3.2 구조 체 를 확장 하 는 구조 기 (함수 / 방법)
  • 1. 기본 적 인 상황 에서 구조 체 를 예화 할 때 시스템 이 구조 체 에 제공 하 는 기본 구조 함수
  • 를 호출 합 니 다.
  • 2. 구조 함수 가 실 행 될 때 모든 구성원 변수 가 초기 화 되 었 음 을 보증 해 야 합 니 다
  • .
  • 3. 구조 함 수 를 확장 하고 시스템 의 기본 구조 함 수 를 명확 하 게 실현 하지 않 으 면 확 장 된 구조 함 수 는 시스템 의 기본 구조 함수
  • 를 덮어 씁 니 다.
    struct Location {
        var x : Double
        var y : Double
        
        //                 ,               
        init(x : Double, y : Double) { //              
            self.x = x //         self ,            
            self.y = y //
        }
        
        //          ,                , 
        //                    ,           
        init(x : String, y : String) { //        
            self.x = Double(x)!
            self.y = Double(y)!
            //        ,          ,       ,            nil ,
            //          ,               , (       )
        }
        
        init() {   //          ()              
            x = 0  //self.x = 0 //        self
            y = 0  //self.y = 0
        }
    }
    
    let center = Location()
    let center2 = Location(x: 10, y: 10)
    let center3 = Location(x: "20", y: "30")
    print(center)
    print(center2)
    print(center3)
    //     :
    //Location(x: 0.0, y: 0.0)
    //Location(x: 10.0, y: 10.0)
    //Location(x: 20.0, y: 30.0)
    

    3.3 "값 형식" 의 구조 에이전트
  • 구조 기 대리: 구조 방법 간 의 상호 호출
  • 구조 방법 은 다른 구조 방법 으로 사례 의 구 조 를 완성 할 수 있 는데 이 를 구조 기 대리
  • 라 고 부른다.
  • 장점: 구조 방법 간 의 중복 코드 감소
  • struct Rect1 {
        var width:Double
        var height:Double
        init(width:Double, height:Double){
            self.width = width
            self.height = height
        }
        
        init(){
            //width = 0
            //height = 0
            //     
            self.init(width:0 , height:0)
        }
        
        func show(){
            print("width = \(width) height = \(height)")
        }
    }
    var r2 = Rect1()
    r2.show()
    //    : width = 0.0 height = 0.0
    
    var r3 = Rect1(width: 100, height: 100)
    r3.show()
    //    : width = 100.0 height = 100.0
    

    4. 구조 체 확장 함수 (방법) 를 멤버 라 고도 부른다.
  • C 와 OC 에서 구조 체 는 속성 만 있 고 Swift 에서 구조 체 는 함수 (방법)
  • 를 정의 할 수 있다.
    4.1 사용자 정의 구조 체 확장 함수
  • 사용자 정의 구조 체 확장 함수 에 함수 앞 에 mutating
  • 를 추가 해 야 합 니 다.
  • 구조 체 에 함 수 를 정의 하고 이 함 수 는 이 구조 체
  • 에 만 속 합 니 다.
  • 구조 체 중의 구성원 함 수 는 반드시 특정한 인 스 턴 스 호출
  • 을 사용 해 야 한다.
  • 구조 체 내부 함수 가 구성원 속성 에 접근 할 수 있 음
  • struct Location {
        var x : Double
        var y : Double
        
        //         ,        mutating
        mutating func moveH(distance : Double) {
            x += distance
        }
        
        mutating func moveV(distance : Double) {
            y += distance
        }
        
        mutating func test() {
            print("test")
        }
    }
    
    var center = Location(x: 100, y: 100)
    center.moveH(100)
    center.moveV(-100)
    print(center)
    

    4.2 시스템 의 구조 체 확장 방법
  • 시스템 이 구조 체 유형 을 제공 하기 전에 extension
  • 를 더 해 야 한다.
    extension CGPoint {
        mutating func moveH(distance : CGFloat) {
            x += distance
        }
    }
    
    var point = CGPoint(x: 100, y: 100)
    point.moveH(50)
    print(point)
    

    4.3 (보충) 시스템 의 유형 확장 방법
  • 시스템 을 사용 하여 제공 하 는 방법
  • let btn = UIButton()
    btn.setTitle("  ", forState: .Normal)
    let title = btn.titleLabel!.text
    
  • 시스템 에 제공 하 는 클래스 추가 방법 은 클래스 이름 앞 에 extension 키워드
  • 를 붙 여야 합 니 다.
    extension UIButton {
        func getTitle() -> String? {
            return self.titleLabel!.text
        }
    }
    let title1 = btn.getTitle()
    

    5. 구조 체 는 값 유형
    5.1 구조 체 변수 나 상수 대 가 는 값 복사 이다.
  • 구조 체 는 값 유형 이 고 구조 체 간 의 대 가 는 등호 = 오른쪽 구조 체 중의 값 을 등호 = 왼쪽 의 변수 나 상수
  • 로 완전히 복사 하 는 것 이다.
  • 그래서 구조 체 간 의 상호 대 가 는 두 개의 서로 다른 인 스 턴 스 이 고 값 복사 복사
  • 이다.
    struct Rect4 {
        var width:Double
        var height:Double = 0.0
        func show() -> Void{
            print("width = \(width) height = \(height)")
        }
    }
    
    var r5 = Rect4(width: 10.0, height: 10.0)
    var r6 = r5
    r5.show()
    r6.show()
    r5.width = 20.0
    r5.show()
    r6.show()
    //    :
    //width = 10.0 height = 10.0
    //width = 10.0 height = 10.0
    //width = 20.0 height = 10.0
    //width = 10.0 height = 10.0
    
    

    5.2 구조 체 상수 와 저장 속성의 관계
  • 구조 체 와 매 거 진 값 유형
  • 따라서 구조 체 상수 중의 속성 을 수정 할 수 없다
  • 구조 체 / 매 거 상수 대상 의 값 을 수정 할 수 없습니다. 그 가 가리 키 는 대상 은 상수
  • 이기 때 문 입 니 다.
    struct Person2 {
        var name: String
        var age: Int
    }
    let p2: Person2 = Person2(name: "cdh", age: 20)
    //         ,                
    //       /         ,              
    //      
    //p2.name = "CDH" //             
    //      
    //p2 = Person2(name: "CDH", age: 50)
    

    5.3 (보충) 클래스 상수 와 저장 속성의 관계
  • 클래스 는 인용 유형 입 니 다.
  • 클래스 상수 중 속성의 값 을 수정 할 수 있 습 니 다. 그 가 가리 키 는 대상 은 상수 가 아니 기 때 문 입 니 다
  • class Person3 {
        var name: String = "cdh"
        var age: Int = 20
    }
    let p3:Person3 = Person3()
    //            ,               
    p3.name = "CDH"
    //           
    //        
    //p3 = Person4()
    

    좋은 웹페이지 즐겨찾기