수색…


비고

init() 은 클래스의 이니셜 라이저를 선언하는 데 사용되는 클래스의 특별한 메소드입니다. 자세한 정보는 여기에서 찾을 수 있습니다 : 초기화 프로그램

클래스 정의

다음과 같이 클래스를 정의합니다.

class Dog {}

클래스는 다른 클래스의 하위 클래스가 될 수도 있습니다.

class Animal {}
class Dog: Animal {}

이 예에서 AnimalDog 준수하는 프로토콜 일 수도 있습니다.

참조 의미

클래스는 참조 유형 이므로 여러 변수가 동일한 인스턴스를 참조 할 수 있습니다.

class Dog {
    var name = ""
}

let firstDog = Dog()
firstDog.name = "Fido"

let otherDog = firstDog  // otherDog points to the same Dog instance
otherDog.name = "Rover"  // modifying otherDog also modifies firstDog

print(firstDog.name)  // prints "Rover"

클래스는 참조 유형이므로 클래스가 상수 인 경우에도 변수 속성을 수정할 수 있습니다.

class Dog {
    var name: String // name is a variable property.
    let age: Int // age is a constant property.
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

let constantDog = Dog(name: "Rover", age: 5)// This instance is a constant.
var variableDog = Dog(name: "Spot", age 7)// This instance is a variable.

constantDog.name = "Fido" // Not an error because name is a variable property.
constantDog.age = 6 // Error because age is a constant property.
constantDog = Dog(name: "Fido", age: 6)
/* The last one is an error because you are changing the actual reference, not
just what the reference points to. */

variableDog.name = "Ace" // Not an error because name is a variable property.
variableDog.age = 8 // Error because age is a constant property.
variableDog = Dog(name: "Ace", age: 8)
/* The last one is not an error because variableDog is a variable instance and
therefore the actual reference can be changed. */

=== 사용하여 두 객체가 동일한 지 테스트합니다 (똑같은 인스턴스를 가리 킵니다).

class Dog: Equatable {
    let name: String
    init(name: String) { self.name = name }
}

// Consider two dogs equal if their names are equal.
func ==(lhs: Dog, rhs: Dog) -> Bool {
    return lhs.name == rhs.name
}

// Create two Dog instances which have the same name.
let spot1 = Dog(name: "Spot")
let spot2 = Dog(name: "Spot")

spot1 == spot2   // true, because the dogs are equal
spot1 != spot2   // false

spot1 === spot2  // false, because the dogs are different instances
spot1 !== spot2  // true

속성 및 메서드

클래스는 클래스의 인스턴스에서 사용할 수있는 속성을 정의 할 수 있습니다. 이 예제에서 Dog 에는 두 개의 속성 namedogYearAge .

class Dog {
    var name = ""
    var dogYearAge = 0
}

도트 구문을 사용하여 속성에 액세스 할 수 있습니다.

let dog = Dog()
print(dog.name)
print(dog.dogYearAge)

클래스는 인스턴스에서 호출 할 수있는 메서드 를 정의 할 수도 있습니다.이 메서드 는 클래스 내부에서 일반 함수 와 비슷하게 선언됩니다.

class Dog {
    func bark() {
        print("Ruff!")
    }
}

또한 메소드를 호출 할 때 도트 구문을 사용합니다.

dog.bark()

클래스와 다중 상속

Swift는 다중 상속을 지원하지 않습니다. 즉, 하나 이상의 클래스에서 상속받을 수 없습니다.

class Animal { ... }
class Pet { ... }

class Dog: Animal, Pet { ... } // This will result in a compiler error.

대신 유형을 만들 때 composition을 사용하는 것이 좋습니다. 이것은 프로토콜 을 사용하여 수행 할 수 있습니다.

해고하다

class ClassA {

    var timer: NSTimer!

    init() {
        // initialize timer
    }

    deinit {
        // code
        timer.invalidate()
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow