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)


댓글 없음:

댓글 쓰기

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

5월 14일 새벽에 chatGPT 4o가 발표되었습니다. 옵티마이즈, 옴니라는 의미인데 실시간 통역, 다자간 회의, 멀티모달 기능의 강화등이 보이네요.

  초격차로 OpenAI진영이 다시 앞서가는 모양을 보여주고 있습니다. 저도 새벽에 일어나자 마자 올라온 영상들과 글을 정리하고 있습니다. ㅎㅎ 영화 HER의 사진이 새벽에 많이 올라왔었는데 저도 안본 영화입니다. 주말에 한번 봐야 할 것 같습니다....