swift 류 의 패키지, 계승, 재 작성, 다 중

3355 단어
클래스 의 실질 은 일종 의 데이터 유형 으로 int, char 등 기본 유형 과 유사 하 며 서로 다른 것 은 복잡 한 데이터 유형 이다.데이터 가 아 닌 유형 이 본질 이기 때문에 메모리 에 존재 하지 않 고 직접 조작 할 수 없 으 며 대상 으로 예화 되 었 을 때 만 조작 할 수 있 습 니 다.
패키지 (Encapsulation) 는 프로그램의 구현 디 테 일 을 숨 기 는 방법 중 하 나 는 데이터 와 알고리즘 을 보호 하 는 것 입 니 다. 코드 가 쉽게 이해 되 고 유지 되 며 실현 수단 의 접근 권한 제어 기본 internal public: 어디서 든 internal 에 접근 할 수 있 습 니 다. 모듈 framwork 정적 라 이브 러 리 에 서 는 private 에 접근 할 수 있 습 니 다. 정의 할 수 있 는 파일 만 사용 할 수 있 습 니 다.
속성 클래스 를 저장 하면 데 이 터 를 직접 저장 할 수 있 는 속성 구성원 변 수 를 가 져 올 수 있 습 니 다. 예 를 들 어 var name = "xiaomao" 는 속성 클래스 를 설정 하거나 수정 할 수 있 는 시기 입 니 다. 예 를 들 어:
class Animal{
    var name:String!
    var age:Double!{
        willSet(newValue){print("\(age)     :\(newValue)")}
        didSet{print("     :\(age)")}
    }
  init(){
        name="aaa"
        age=10
  }
}

테스트:
var ani=Animal()
ani.age=28

출력:
10.0     :28.0
     :28.0

계산 속성 자 체 는 데 이 터 를 저장 할 수 없 으 며 대상 의 다른 데이터 에 의 해 계산 된다. 예 를 들 어 하나의 원 을 정의 하여 반지름 을 확정 하면 면적 을 확정 할 수 있 고 반지름 도 확정 할 수 있다.
class Circle {
    var r:Double=0
    var area:Double!{
        set(newArea){
            print("    :",area,"    :",newArea)
            r=sqrt(newArea/3.14)
        }
        get{return r*r*3.14}
    }
}

테스트:
var cir=Circle()
cir.r=10
print("  :",cir.r,"  :",cir.area)
cir.area=3.14
print("  :",cir.r,"  :",cir.area)

출력:
  : 10.0   : 314.0
    : 314.0     : 3.14
  : 1.0   : 3.14
```

**  (inherita):**
                    
         
               
swfit      

**  (  ):**
          
      override

  :

     
```
class Animal{
    var name:String!
    var age:Double=0
    }
    var weigth:Double!
    init(){
        name="animal"
        age=10
        weigth=10
    }
    func eat() {
        print(name,"    !")
    }
}
```
   Animal  eat()   bite()
```
class Dog: Animal {
    func bite() {
        print(name,"    !")
    }
    override func eat() {
        print(name,"      ")
    }
}
```
   Animal  eat()   claw()
```
class Cat: Animal {
    func claw()  {
        print(name,"    ")
    }
    override func eat() {
        print(name,"      ")
    }
}
```
    :
```
let cat1=Cat()
cat1.name="    "
var dog1=Dog()
dog1.name="   "
var ani=Animal()
ani.name="  "
dog1.bite()
cat1.claw()

dog1.eat()
cat1.eat()
ani.eat()

//Animal     Dog 
//dog1=Animal()
//     
//  Cannot assign value of type 'Animal' to type 'Dog'
ani=Dog()
ani.name="   "
ani.eat()

//   Dog   bite()
dog1=ani as! Dog
dog1.bite()

//       eat()
ani=Cat()
ani.name="    "
ani.eat()
```
  
```
        !
         
          
           
       !
          
        !
           
```
**  (Polymorphism)**
                (       ),              
  !                  ,         (  )    ,  **    **!

  
```
var ani=Animal()
ani.eat()
ani=Dog()
ani.eat()
ani=Cat()
ani.eat()
```
  
```
animal     !
animal       
animal       
```
**  **
protocol (  )     
[http://www.jianshu.com/p/4988132b2b86](http://www.jianshu.com/p/4988132b2b86)
extension(  )     
[http://www.jianshu.com/p/43acce50c680](http://www.jianshu.com/p/43acce50c680)

좋은 웹페이지 즐겨찾기