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)
댓글 없음:
댓글 쓰기
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.