2016년 6월 30일 목요일

Swift 3.0에서 변경된 사항들입니다. xCode 8.0 과 iOS 10.0에서 테스트한 내용들입니다.

Swift 3.0에서 변경된 부분입니다. 아직 정리중입니다. 
정리된 글들이 올라오고 있어서 일부 번역해서 올려봅니다.


1.   ++, --연산자는 더 이상 지원되지 않는다. +=, -=을 사용한다.


        var i = 0
        //다음의 연산자는 제거되었다.
        //i++
        //i--
       
        //아래와 같이 접근해야 한다.
        i += 1
        i -= 1
        print("i: \(i)")
       
2.   C-style for 루프는 사용할 없다.
//        for(var i=1;i<=10;i++)
//        {
//            print(i)
//        }
       
       //아래와 같이 접근해야 한다.
        for i in 1...10 {
            print(i)
        }
       
        (1...10).forEach {
            print($0)
        }

3.   함수의 매개변수 앞에 더 이상 var를 붙일 수 없다.
//function parameter
    //매개변수 앞에  var 붙이는 것은 이상 사용할 없다.
//    func gcd(var a:Int, var b:Int) -> Int {
//        if (a==b) {
//            return a
//        }
//
//        repeat {
//            if (a>b) {
//                a = a - b
//            } else {
//                b = b - a
//            }
//        } while(a != b)
//
//        return a
//    }

    //아래와 같은 코드로 변경해야 한다.
    func gcd(a:Int, b:Int) -> Int {
        if (a == b) {
            return a
        }
       
        var c = a
        var d = b
       
        repeat {
            if (c > d) {
                c = c - d
            } else {
                d = d - c
            }
        } while (c != d )
       
        return c
    }

4.   함수 호출 시에 모든 매개변수명을 라벨형태로 호출해야 한다.
//함수를 호출할 라벨을 붙이는 부분도 변경되었다.
//초보자들에게 혼란이 오기 때문에 첫번째 라벨부터 붙이도록 변경되었다.
//기존 Swift 2.2 스타일
//gcd(8, b: 12)
       
//Swift 3.0스타일
gcd(a: 8, b: 12)
     
//기존 작성했었던 많은 함수에서 혼란이 있기 때문에
애플이 준비한 _ 첫번째 매개변수 앞에 붙여서 해결할 있다.
//func gcd(_ a:Int, b:Int) -> Int


5.   더 이상 Selector는 문자열로 처리되지 않는다.
import UIKit
import XCPlayground

class Responder: NSObject {
    func tap() {
        print("Button pressed")
    }
}

let responder = Responder()

let button = UIButton(type: .system)
button.setTitle("Button", for: [])
//기존에 동작했던 코드
//button.addTarget(responder, action:"tap", forControlEvents: .TouchUpInside)
//#selector 변경됨
button.addTarget(responder, action: #selector(Responder.tap), for: .touchUpInside)
button.sizeToFit()
button.center = CGPoint(x:50, y:25)

let frame = CGRect(x:0, y:0, width:100, height:50)
let view = UIView(frame:frame)
view.addSubview(button)
//XCPlaygroundPage.currentPage.liveView = view

6.   KVC(Key Value Coding)KVO(Key Value Observing)에서 변경된 부분
Key-path스트링은 #keyPath()표현식으로 변경되었다.
class Person: NSObject {
    var name: String = ""
   
    init(name:String) {
        self.name = name
    }
}

let me = Person(name: "Cosmin")
//기존에 사용하던 코드
//me.valueForKeyPath("name")
//Swift 3.0에서 변경된 코드
me.value(forKeyPath: #keyPath(Person.name))

7.   NS Prefix가 삭제되었다.
//기존에 사용하던 코드
//let file = NSBundle.mainBundle().pathForResource("tutorials",
//        ofType: "json")
//let url = NSURL(fileURLWithPath: file!)
//let data = NSData(contentsOfURL: url)
//let json = try! NSJSONSerialization.JSONObjectWithData(data!,
//        options: [])
//print(json)

//변경된 코드
//Swift 3.0 코드
let file = Bundle.main().pathForResource("tutorials", ofType: "json")
let url = URL(fileURLWithPath: file!)
let data = try! Data(contentsOf: url)
let json = try! JSONSerialization.jsonObject(with: data)
print(json)

8.   M_PI 가 아닌 .pi 로 호출 한다.
//기존 스타일은 아래와 같은 코드
let r = 3.0
let circumference = 2 * M_PI * r
let area = M_PI * r * r

//아래의 코드로 접근 가능
print(Float.pi)
print(Double.pi)
print(CGFloat.pi)
let r2 = 3.0
let circumference2 = 2 * Double.pi * r
let area2 = Double.pi * r * r

9.   GCD에서 변경된 부분
//GCD
//기존 Swift 2.2 스타일
//let queue = dispatch_queue_create("Swift 2.2", nil)
//dispatch_async(queue) {
//    print("Swift 2.2 queue")
//}

//Swift 3.0스타일
let queue = DispatchQueue(label: "Swift 3")
queue.async {
    print("Swift 3 queue")
}

10. Core Graphic에서 변경된 부분

//: Playground - noun: a place where people can play

import UIKit

//기존 Swift 2.2스타일
//let frame = CGRect(x:0, y:0, width:100, height:50)
//
//class View:UIView {
//    
//    override func drawRect(rect:CGRect) {
//        let context = UIGraphicsGetCurrentContext()
//        let blue = UIColor.blueColor().CGColor
//        CGContextSetFillColorWithColor(context, blue)
//        let red = UIColor.redColor().CGColor
//        CGContextSetStrokeColorWithColor(context, red)
//        CGContextSetLineWidth(context, 10)
//        CGContextAddRect(context, 10)
//        CGContextAddRect(context, frame)
//        CGContextDrawPath(context, .FillStroke)
//    }
//}
//
//let aView = View(frame: frame)

//Swift 3.0스타일 
let frame = CGRect(x: 0, y: 0, width: 100, height: 50)

class View: UIView {
    override func draw(_ rect: CGRect) {
        guard let context = UIGraphicsGetCurrentContext() else {
            return
        }
        
        let blue = UIColor.blue().cgColor
        context.setFillColor(blue)
        let red = UIColor.red().cgColor
        context.setStrokeColor(red)
        context.setLineWidth(10)
        context.addRect(frame)
        context.drawPath(using: .fillStroke)
    }
}
let aView = View(frame: frame)


댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.

'일론 머스크' '젠슨 황' AI 리더들, 그들의 성공 비결은 바로 이것 - 누가 부자가 되는가 영상입니다. ㅎㅎ

  책을 통해서만 접했던 내용들을 영상으로 보니 더 실감이 납니다. KBS에서 방송된 내용인데 주말에 보시면 좋은 영상입니다. 엔비디아의 주가가 이해가 됩니다. ㅋㅋ 생각보다 미국시장이 강한 것이 AI는 거의 미국과 중국이 주도하는 시장이 되고 있습...