swift 계승 및 구조기

6196 단어 swift
물려받다
class Vehicle {

    var numberOfWheels: Int

    var maxPassengers: Int

    func description() -> String {

        return "\(numberOfWheels) wheels; up to \(maxPassengers) passengers"

    }

    init() {

        numberOfWheels = 0

        maxPassengers = 1

    }

}



class Bicycle: Vehicle {

    init() {

        super.init()

        numberOfWheels = 2

    }

}


다시 쓰다
어떤 특성을 다시 쓰려면, 정의를 다시 쓰기 전에 오버라이드 키워드를 붙여야 합니다.이렇게 하면, 같은 정의를 잘못 제공한 것이 아니라, 다시 쓰는 버전을 제공하려는 것을 나타낸다.방법, 속성, 하위 스크립트를final로 표시해서 다시 쓰는 것을 방지할 수 있습니다. 키워드를 설명하기 전에 @final 기능을 추가하면 됩니다.(예: @final var, @final func, @final class func, 그리고 @final subscript) 키워드 class 전에 @final 특성 (@final class) 을 추가해서final로 표시할 수 있습니다. 이런 종류는 계승할 수 없습니다. 그렇지 않으면 컴파일 오류가 발생합니다.
  class Car: Vehicle {

    var speed: Double = 0.0

    init() {

        super.init()

        maxPassengers = 5

        numberOfWheels = 4

    }

    override func description() -> String {

        return super.description() + "; "

            + "traveling at \(speed) mph"

    }



    override var speed: Double  {

    get {

        return super.speed

    }

    set {

        super.speed = min(newValue, 40.0)

    }

    }





     override var speed: Double {

    didSet {

        gear = Int(speed / 10.0) + 1

    }

    }

}


저장형 속성의 초기 할당 값
클래스와 구조체는 실례를 만들 때 모든 저장형 속성에 적합한 초기 값을 설정해야 한다.메모리 속성의 값은 알 수 없는 상태에 있을 수 없습니다.저장형 속성에 기본값을 설정하거나 구조기에 값을 부여할 때, 그 값은 직접적으로 설정되어 있으며, 그 어떠한 속성 관측기 (property observers) 도 터치하지 않습니다.
기본 속성 값 초기화 속성
기본값은 속성의 초기화와 속성의 성명을 더욱 밀접하게 결합시킨다.기본값을 사용하면 구조기가 더욱 간결하고 뚜렷하며 기본값을 통해 자동으로 속성의 유형을 유도할 수 있다.
  struct Fahrenheit {

    var temperature = 32.0

}


구조자 초기화 속성
구조기는 특정한 유형의 새로운 실례를 만들 때 호출됩니다.키워드 init로 이름을 지정합니다.
struct Fahrenheit {

    var temperature: Double

    init() {

        temperature = 32.0

    }

}


구조기는 함수와 방법처럼 괄호 앞에 식별할 수 있는 이름이 있는 것이 아니다.그래서 구조기를 호출할 때 주로 구조기의 매개 변수 이름과 유형을 통해 호출할 구조기를 확정한다.매개 변수가 이렇게 중요하기 때문에 만약에 구조기를 정의할 때 매개 변수의 외부 이름을 제공하지 않는다면 Swift는 모든 구조기의 매개 변수에 내부 이름과 같은 외부 이름을 자동으로 생성합니다. 이것은 모든 구조 매개 변수 앞에 해시 기호를 추가하는 것과 같습니다.
  struct Celsius {

    var temperatureInCelsius: Double = 0.0

    init(fromFahrenheit fahrenheit: Double) {

        temperatureInCelsius = (fahrenheit - 32.0) / 1.8

    }

    init(fromKelvin kelvin: Double) {

        temperatureInCelsius = kelvin - 273.15

    }

}


구조 과정이 끝나기 전에 상수의 값이 확정되기만 하면 구조 과정 중의 임의의 시간에 상수 속성의 값을 수정할 수 있다.어떤 종류의 실례에 대해 말하자면, 그것의 상량 속성은 그것의 종류를 정의하는 구조 과정에서만 수정할 수 있다.하위 클래스에서는 수정할 수 없습니다.
class SurveyQuestion {

    let text: String = "sss";

    var response: String?

    init(_ text: String) {

        self.text = text

    }

    func ask() {

        println(text)

    }

}

var a  = SurveyQuestion("dddd")

a.ask();


기본 구조자
Swift는 모든 속성에 기본값을 제공하고 자신이 정의한 구조체나 클래스가 없는 기본 구조자를 제공합니다.
  class ShoppingListItem {

    var name: String?

    var quantity = 1

    var purchased = false

}

var item = ShoppingListItem()


멤버 하나하나 구조기---구조체만...클래스에 이 구조기가 없습니다
만약 구조체가 모든 저장형 속성에 기본값을 제공하고 자체적으로 맞춤형 구조기를 제공하지 않는다면, 그들은 자동으로 하나의 구성원 구조기를 얻을 수 있다.
struct Size {

    var width = 0.0, height = 0.0

}

let twoByTwo = Size(width: 2.0, height: 2.0)


어떤 값 형식에 맞춤형 구조기를 정의하면 기본 구조기에 접근할 수 없습니다. (구조체라면 대상 구조기에 접근할 수 없습니다.)이 제한은 값 유형에 대한 정의가 더욱 복잡해지고 중요한 준비 구조기를 완성한 후에도 다른 사람들이 자동으로 생성된 구조기를 잘못 사용하는 것을 방지할 수 있다.
구조기 에이전트
구조기는 다른 구조기를 호출하여 실례의 일부 구조 과정을 완성할 수 있다.이 과정을 구조기 에이전트라고 하는데, 여러 구조기 간의 코드 중복을 줄일 수 있다.플러그인 구조기 방법으로 값 유형에 대해self를 사용할 수 있습니다.init는 사용자 정의 구조기에서 같은 값에 속하는 다른 구조기를 인용합니다.그리고 당신은 구조기 내부에서self만 호출할 수 있습니다.init.
struct Rect {

    var origin = Point()

    var size = Size()

    init() {}

    init(origin: Point, size: Size) {

        self.origin = origin

        self.size = size

    }

    init(center: Point, size: Size) {

        let originX = center.x - (size.width / 2)

        let originY = center.y - (size.height / 2)

        self.init(origin: Point(x: originX, y: originY), size: size)

    }

}


지정 구조기와 편리 구조기
4
  • 지정 구조기는 직접 부류의 지정 구조기를 호출해야 한다

  • 4
  • 편의구조기는 같은 종류에 정의된 다른 구조기를 호출해야 한다

  • 4
  • 편의구조기는 최종적으로 지정된 구조기를 호출해서 끝내야 한다

  • 편리한 구조기는 init 키워드 앞에 convenience 키워드를 놓고 빈칸을 사용하여 두 키워드를 분리해야 합니다.
      class Food {
    
        var name: String
    
        init(name: String) {
    
            self.name = name
    
        }
    
        convenience init() {
    
            self.init(name: "[Unnamed]")
    
        }
    
    }
    
    
    
    

    방법, 속성, 하표와 달리 구조기를 다시 불러올 때 키워드override를 사용할 필요가 없습니다.
    만약 당신이 다시 불러오는 구조기가 지정한 구조기라면, 하위 클래스에서 그것을 다시 불러올 수 있고, 사용자 정의 버전의 구조기에서 부모 버전의 구조기를 호출할 수 있습니다.만약 네가 다시 불러오는 구조기가 편리한 구조기라면, 너의 다시 불러오는 과정은 같은 종류에 제공된 다른 지정된 구조기를 호출해서 이루어져야 한다.
    자동 구조기의 계승
    4
  • 하위 클래스가 지정한 구조기를 정의하지 않으면 모든 하위 클래스의 지정한 구조기를 자동으로 계승합니다

  • 4
  • 만약에 자류가 모든 부류 지정 구조기의 실현을 제공했다면 규칙 1을 통해 계승되었든 사용자 정의를 통해 이루어졌든 모든 부류의 편리한 구조기를 자동으로 계승할 것이다

  • 클립과 함수를 통해 속성의 기본값을 설정합니다
    이러한 유형의 클립이나 함수는 일반적으로 속성 형식과 같은 임시 변수를 만들고 그 값을 수정하여 예상한 초기 상태를 만족시키고 마지막으로 이 임시 변수의 값을 속성의 기본값으로 되돌려줍니다.클로즈업 끝의 큰 괄호 뒤에 빈 작은 괄호 한 쌍이 연결되어 있음을 주의하세요.이것은 Swift가 이 클립을 즉시 실행해야 한다는 것을 알리는 데 쓰인다.만약 이 괄호를 무시한다면, 패키지 자체를 값으로 속성에 부여하는 것이지, 패키지의 반환값을 속성에 부여하는 것이 아니다.만약 폐쇄를 사용하여 속성의 값을 초기화한다면, 폐쇄가 실행될 때, 실례의 다른 부분은 아직 초기화되지 않았다는 것을 기억하십시오.이것은 패키지에서 다른 속성에 접근할 수 없다는 것을 의미합니다. 기본값이 있어도 허용되지 않습니다.마찬가지로, 당신도 은식self 속성을 사용하거나 다른 실례적인 방법을 사용할 수 없습니다.새로운 실례가 생성될 때마다 대응하는 값 클립이 실행됩니다.
    struct Checkerboard {
    
        let boardColors: Bool[] = {
    
            var temporaryBoard = Bool[]()
    
            var isBlack = false
    
            for i in 1...10 {
    
                for j in 1...10 {
    
                    temporaryBoard.append(isBlack)
    
                    isBlack = !isBlack
    
                }
    
                isBlack = !isBlack
    
            }
    
            return temporaryBoard
    
            }()
    
        func squareIsBlackAtRow(row: Int, column: Int) -> Bool {
    
            return boardColors[(row * 10) + column]
    
        }
    
    }
    
    

    좋은 웹페이지 즐겨찾기