swift 학습 02 - 데이터 구조 와 클래스

6079 단어 swift 의 길
1: 비 울 수 있 는 타 입
우선 swift 언어 는 비어 있 는 유형의 개념 을 도 입 했 는데 이것 은 objective - c 와 다르다.oc 에서 모든 데이터 형식 은 nil 일 수 있 지만 swift 에서 모든 데이터 형식 은 상대 적 으로 비어 있 는 유형 이 있 습 니 다. 다음은 간단 한 비어 있 는 유형의 설명 과 포장 을 뜯 는 과정 을 보 여 드 리 겠 습 니 다.
//    
var str:String?//    ,           ?
str = "asd"
print("123", separator: "123", terminator: "789")
str!.uppercaseString//        (     ,    ),                2   ,           api,    (              )
//     
var a : Int?//      
a = 1

func printInt(a:Int){//        
    
    print("\(a)");
    
}
//  
printInt(a!)//    ,             ,      


func printOptionalInt(a:Int?){//        
    
    print("\(a)")
}
printOptionalInt(a)//a     ,     ,      。       Optional(  )

if a==nil{//         nil   
    
    print("nil")
}else{
    
    print("real")
}


//  (             )
var b:Int = 2
func printOther(a:Int?){
    
    print("\(a)")
}
printOther(b)//    。        ,      。

두 번 째: 배열 과 사전
비록 배열 은 swift 언어 에서 요 소 를 고정 시 키 지 않 을 수 있 지만 (한 배열 에 몇 가지 데이터 형식 을 넣 을 수 있 습 니 다), 예 를 들 어 배열 은 다음 과 같이 쓸 수 있 습 니 다.
let arrayA :Array = [1,"2","3"];//           2     ,
가능 하지만 이 를 권장 하지 않 습 니 다. 프로그램의 가 독성 과 유지 보수 성 이 너무 떨 어 지기 때 문 입 니 다.
쓰기 권장:
var arrayB:Array = [1,7]//        

사전 은 swift 에서 엄격 한 정 의 를 내 립 니 다. 키 값 이 맞 는 데이터 형식 을 만들어 야 합 니 다. 그렇지 않 으 면 컴 파일 할 수 있 습 니 다. 다음 과 같 습 니 다.
var dic:Dictionary?//          
dic = ["1":"mike","2":"50"]//             ,  value         (  : String),         ,       
dic!["1"] 꺼 낸 값 은 비어 있 는 optional ("mike") 이지 비어 있 는 "mike" 가 아 닙 니 다.
사전 의 옮 겨 다 니 기 는 원 그룹 으로 옮 겨 다 닐 수 있 습 니 다. 다음 과 같 습 니 다.
for(key,value) in dic!{//   
    
    print("\(key,value)")
}

매 거
swift 에서 매 거 진 정의 와 사용 은 oc 와 별 차이 가 없습니다. 다음은 swift 에서 매 거 진 정의 와 응용 인 스 턴 스 입 니 다.
enum Week:Int{//          
    
    case Monday = 1
    case Tuesday
    case wednesday
    case Thursday
    case Friday
    case Saturday
    case Sunday
}
print(Week.Tuesday.rawValue)//             ,    2

enum Week2:String{//           
    
    case Monday="xingqiyi"
    case Tuesday="xiangqier"
}

let i = "xingqiyi"
if let day = Week2.init(rawValue: "xingqiyi"){//             
    
    switch day{
        
    case .Monday,.Tuesday:
        print("\(day)")//    Monday(             )
    }
}

enum Week3{//        
    
    case Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
var weekday = Week3.Friday
switch weekday{
case Week3.Friday:
    print("weekday")
case Week3.Saturday:
    print("weekend")
default:
    break
}

//    
enum Color{
    
    case RGB(Int,Int,Int)
    case RGBA(Int,Int,Int,Float)
    case CMYK(Int,Int,Int,Int)
}
var color1 = Color.RGB(102, 102, 0);
var color2 = Color.RGBA(100, 100, 10, 0.5);
print(color1)
color1 = color2;
print(color1)

4. 구조 체 와 클래스
구조 체 와 클래스 의 이름 은 같 습 니 다. 하 나 는 class 이 고 하 나 는 struct 입 니 다.다음은 구조 체 의 일반적인 용법 을 보고 상세 한 내용 은 주석 을 보십시오.
4.1 구조 체
//   ,         
struct Point{
    
    //x,y     ,        
    var x = 0,y = 0
    
    //isOrigin     (      ,        ,                 )
    var isOrigin:Bool{
        
        get{
            return x==0 && 0 == y
        }
        
        set(origin){
            
            if origin{
                
                x = 0;y = 0
            }
        }
    }
    init(x _x:Int,y _y:Int){
        
        x = _x;
        y = _y;
    }
    
    //                 ,    mutating
    /*
    *             ,                        ,          mutating,          
mutating
* 클래스 는 값 형식 에 속 하지 않 기 때문에 mutating * / mutating func addOffset (x dx: Int, y dy: Int) {x + = dx y + = dy} / / 구조 체 의 클래스 방법 을 추가 할 필요 가 없습니다. 클래스 의 클래스 방법 은 static 키 워드 를 class 로 바 꾸 면 static func detaPoint (p1: Point, p2: Point) - > Point {return Point. init (x: (p2. x - p1. x), y: (p2. y - p1. y)}}}}
 
  
: , , , set 。 , , !!!!! , , mutating 。 。

4.2

oc , swift , subscript , 。 , 。 。

struct Week4 {
    
    var day:Array>
    
    init(){
        
        day = [
        
            ["englishname":"Sunday","chinesename":"   "],
            ["englishname":"Monday","chinesename":"   "]
        ];
    }
    
    subscript(index:Int)->String?{//    ,              
        
        let dic = day[index]
        return dic["englishname"];
    }
}

let week4 = Week4.init()
week4[0];//          ,            0

4.3 유형 및 유형의 계승
class Box {
    var width:Float = 0.0,height:Float = 0.0//    ,       0
    init(width _width:Float,height _height:Float){//   
        
        width = _width
        height = _height
        
    }
    
    func draw(){//  ,    
        
        print("I am a box with width\(width) and height \(height)")
    }
}
let box = Box.init(width: 1.0, height: 3.0)
box.draw()

class squareBox: Box {
    
    init(width:Float){//   
        
        super.init(width: width, height: width)
    }
    
    override func draw() {//       。    override,           。      swift           ,  set get      super 。
        
        print("i am a squareBox with width \(self.width)")
    }
    
}
let squareBox1 = squareBox(width: 2.0)
squareBox1.draw()
print(squareBox1.width,squareBox1.height)

구조 체 와 매 거 진 은 모두 값 유형 으로 계승 은 존재 하지 않 으 며 계승 은 클래스 의 특성 일 뿐이다.

좋은 웹페이지 즐겨찾기