스위프트 3.0에는 어떤 새로운 것들이 있을까?
이 글은 제가 할 수 있는 대로 코드 샘플을 이용하여 Swift 3.0의 가장 중요한 변화를 설명해 드리겠습니다. Swift 3.0을 업그레이드할 준비를 하시기 바랍니다.Swift 3.0의 변화는 내 아래의 이 목록만이 아니지만, 목록의 모든 것이 너에게 큰 타격이다.
미리 경고 # 1: Swift 3.0은 아직 개발 중입니다.
# 2:Swift 3.0에 대해 미리 경고하는 바는 많은데 그 중 일부는 사소한 부분에 있을 수 있습니다.그러나 우리는 이러한 변화가 일회성이기를 바란다.Swift가 앞으로 몇 년 동안 더욱 잘 발전할 수 있도록 앞으로의 버전 업데이트에서 변화가 현저하게 작아져야 한다.
미리 경고#3: 일부 Swift 2.2의 물건은 이미 유행이 지났고 삭제되었다.이것은++, --, C 스타일의 for 순환, 원조 문법 등을 포함한다.
네가 견지하지 않으면 모든 함수 매개 변수에 라벨이 있다
Swift 2.0에서 함수와 방법을 호출하는 것은 이미 바뀌었고 3.0에서 또 변화가 생겼다. 이번 변화는 철저하고 낡은 나를 버리는 것이다!Swift 2.0 및 이전의 방법명은 첫 번째 파라미터에 라벨을 설정할 필요가 없기 때문에 첫 번째 파라미터 이름은 보통 방법명칭의 마지막에 내장된다. 예를 들어 다음과 같다.
names.indexOf("Taylor")
"Taylor".writeToFile("filename", atomically:true, encoding:NSUTF8StringEncoding)
SKAction.rotateByAngle(CGFloat(M_PI_2), duration:10)
UIFont.preferredFontForTextStyle(UIFontTextStyleSubheadline)
overridefuncnumberOfSectionsInTableView(tableView:UITableView) ->IntfuncviewForZoomingInScrollView(scrollView:UIScrollView) ->UIView?
NSTimer.scheduledTimerWithTimeInterval(0.35, target:self, selector:#selector(createEnemy), userInfo:nil, repeats:true)
Swift 3.0의 모든 레이블은 필수입니다. 이것은 방법명에 더 이상 매개 변수가 없는 부분을 의미합니다.실제 작업에서 방법명의 마지막 부분이 괄호 안으로 옮겨졌다.
names.indexOf("Taylor")
names.index(of:"Taylor")
"Taylor".writeToFile("filename", atomically:true, encoding:NSUTF8StringEncoding)
"Taylor".write(toFile:"somefile", atomically:true, encoding:NSUTF8StringEncoding)
SKAction.rotateByAngle(CGFloat(M_PI_2), duration:10)
SKAction.rotate(byAngle:CGFloat(M_PI_2), duration:10)
UIFont.preferredFontForTextStyle(UIFontTextStyleSubheadline)
UIFont.preferredFont(forTextStyle: UIFontTextStyleSubheadline)
override func numberOfSectionsInTableView(tableView:UITableView) ->Int
override func numberOfSections(in tableView:UITableView) ->Int
func viewForZoomingInScrollView(scrollView:UIScrollView) ->UIView?
func viewForZooming(in scrollView:UIScrollView) ->UIView?
NSTimer.scheduledTimerWithTimeInterval(0.35, target:self, selector:#selector(createEnemy), userInfo:nil, repeats:true)
NSTimer.scheduledTimer(timeInterval:0.35, target:self, selector:#selector(createEnemy), userInfo:nil, repeats:true)
그러나 연쇄 반응하는 방법이 있다. 우리가 프레임에 연결될 때, 예를 들어 UIKit 등이다. 이런 방법은 Swift 3.0에서 기존의'무일참수명'의 규칙을 그대로 사용하기를 바란다.Swift 2.2:
override func viewWillAppear(animated:Bool)
override func tableView(tableView:UITableView, numberOfRowsInSection section:Int) ->IntoverridefuncdidMoveToView(view:SKView)
override func traitCollectionDidChange(previousTraitCollection:UITraitCollection?)
func textFieldShouldReturn(textField:UITextField) ->Bool
Swift 3.0에서는 매개변수 레이블 대신 첫 번째 매개변수 앞에 밑줄을 사용하여 ObjC 코드를 사용해야 합니다.
override func viewWillAppear(_animated:Bool)
override func tableView(_tableView:UITableView, numberOfRowsInSection section:Int) ->Int
override func didMoveToView(_view:SKView)
override func traitCollectionDidChange(_previousTraitCollection:UITraitCollection?)
func textFieldShouldReturn(_textField:UITextField) ->Bool
불필요한 단어를 등한시하다
스위프트가 2015년 12월에 개원되었을 때 새로운 API 가이드라인에는'불필요한 단어를 소홀히 한다'는 세 가지 치명적인 단어가 포함되어 있었다. 이것은 스위프트 3.0에서 또 하나의 커다란 변화를 도입했다. 방법명에서 전혀 등장할 필요가 없는 단어들이 옮겨지기 때문이다.다음 swift 2.2의 코드를 살펴보겠습니다.
letblue = UIColor.blueColor()
letmin = numbers.minElement()
attributedString.appendAttributedString(anotherString)
names.insert("Jane", atIndex:0)
UIDevice.currentDevice()
코드의 문제점을 볼 수 있습니까?우리가 UIColor를 사용할 때 블루는 당연히 하나의 색깔이기 때문에 블루컬러를 사용하는 것은 불필요한 것이다.우리가 속성 문자열을 다른 문자열에 추가할 때, 이 두 개의 문자열은 틀림없이 모두 문자열일 것이다. 다른 하나는 코끼리일 리가 없다. 그렇지?따라서 동일한 코드는 Swift 3.0에서 다음과 같습니다.
letblue = UIColor.blue()
letmin = numbers.min()
attributedString.append(anotherString)
names.insert("Jane", at:0)
UIDevice.current()
보시다시피 이 변화는 방법의 명칭을 더욱 짧게 했다.이러한 변화는 문자열의 조작에 있어 효과가 현저하다. 아래의 코드를 비교하면 Swift 2.2와 Swift 3.0 사이에 우리가 쓴 코드가 정말 적다는 것을 알 수 있다.
" Hello ".stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet())
" Hello ".trimmingCharacters(in: .whitespacesAndNewlines())
"Taylor".containsString("ayl")
"Taylor".contains("ayl")
"1,2,3,4,5".componentsSeparatedByString(",")
"1,2,3,4,5".componentsSeparated(by:",")
myPath.stringByAppendingPathComponent("file.txt")
myPath.appendingPathComponent("file.txt")
"Hello, world".stringByReplacingOccurrencesOfString("Hello", withString:"Goodbye")
"Hello, world".replacingOccurrences(of:"Hello", with:"Goodbye")
"Hello, world".substringFromIndex(7)
"Hello, world".substring(from:7)
"Hello, world".capitalizedString
"Hello, world".capitalized
주의:
capitalized
은 여전히 하나의 속성이지만 lowercaseString
과 uppercaseString
은 방법을 바꾸어 lowercased()
과 uppercased()
이 되었다.Swift 3.0 방법은 다음과 같습니다.
dismiss(animated:true, completion:nil)
너는 우리가 무엇을 디스해야 한다고 생각할지도 모른다.Swift 3.0은 첫 번째 매개변수의 레이블을 추가하고 불필요한 단어를 삭제하기 때문에 위의 코드는 Swift 2.2의 dismissViewControllerAnimated(true, completion:nil)
입니다.같은 효과를 가진 prepareForSegue 방법도 있는데 Swift 3.0에서 이렇게 변했다.
overridefuncprepare(forsegue:UIStoryboardSegue, sender:AnyObject?)
매거와 속성에 대해 낙타봉의 대문자 접두사는 낙타봉 소문자 접두사로 바뀌었다
문법과 아무런 관계가 없지만 우리는 클래스, 구조, 속성과 매거에 대해 시종일관 하나의 약정을 따르고 있다. 클래스, 구조와 매거는 낙타봉 대문자 접두사를 사용하고 속성과 파라미터 명칭은 낙타봉 소문자 접두사를 사용한다.이 약정에도 예외가 있습니다.
NSURLRequest(URL: someURL)
을 사용하여 NSURLRequest 대상을 만들 때 파라미터는 대문자 URL입니다.Swift 3은 이 방법이 NSURLRequest(url: someURL)
이라는 것을 다시 썼고, 또한 webView.request?.url?.absoluteString
방식으로 웹뷰의 URL을 읽을 것을 의미한다.그리고 일부는 속성 부분, 예를 들어
CGColor
또는 CIColor
이다.네, 이제 cgColor
과 ciColor
으로 바뀔 겁니다.letred = UIColor.red().cgColor
이러한 변화는 인코딩의 일치성을 확실히 향상시켰다. 모든 속성과 매개 변수는 소문자로 시작해야 하며 예외가 없다.
이 동시에 매거도 바뀌고 있다. 낙타봉의 대문자 접두사에서 낙타봉 소문자 접두사로 바뀌었다.이것은 매거는 하나의 데이터 형식이지만 매거 값은 속성에 가깝다는 것을 의미한다.그러나 이것은 사과의 매거가 이제 소문자로 바뀌었다는 것을 의미한다.
UIInterfaceOrientationMask.Portrait// old
UIInterfaceOrientationMask.portrait// new
NSTextAlignment.Left// old
NSTextAlignment.left// new
SKBlendMode.Replace// old
SKBlendMode.replace// new
Swift 도입 C 함수
Swift 3은 C 함수의 속성을 가져옵니다.예를 들어 CGContext로 시작하는 모든 함수가 현재 CGContext 대상의 속성 방법으로 비치면, 우리는 우리를 매우 고통스럽게 하는 CGContextSetFillColorWithColor () 함수를 더 이상 사용하지 않을 수 있다.
swift 2.2의 코드:
let ctx = UIGraphicsGetCurrentContext()
let rectangle = CGRect(x:0, y:0, width:512, height:512)
CGContextSetFillColorWithColor(ctx, UIColor.redColor().CGColor)
CGContextSetStrokeColorWithColor(ctx, UIColor.blackColor().CGColor)
CGContextSetLineWidth(ctx,10)
CGContextAddRect(ctx,rectangle)
CGContextDrawPath(ctx, .FillStroke)
UIGraphicsEndImageContext()
Swift 3.0에서 CGContext가 객체로 처리되므로 방법을 직접 호출할 수 있습니다.
if let ctx = UIGraphicsGetCurrentContext() {
letrectangle = CGRect(x:0, y:0, width:512, height:512)
ctx.setFillColor(UIColor.red().cgColor)
ctx.setStrokeColor(UIColor.black().cgColor)
ctx.setLineWidth(10)
ctx.addRect(rectangle)
ctx.drawPath(using: .fillStroke)
UIGraphicsEndImageContext()
}
참고: Swift 2.2이든 Swift 3.0이든 UIGraphicsGetCurrentContext()가 CGContext(옵션)를 반환하므로 Swift 3.0에서 CGContext 객체를 사용하는 방법은 패키지를 먼저 뜯어야 합니다.
C 함수 매핑은 CGPDFDocument의numberOfpages 속성과 CGAffinetransform을 읽는 등 다른 곳에도 존재합니다.다음은 신구 코드 비교입니다.
CGAffineTransformIdentity
CGAffineTransform.identity
CGAffineTransformMakeScale(2,2)
CGAffineTransform(scaleX:2, y:2)
CGAffineTransformMakeTranslation(128,128)
CGAffineTransform(translationX:128, y:128)
CGAffineTransformMakeRotation(CGFloat(M_PI))
CGAffineTransform(rotationAngle: CGFloat(M_PI))
동사와 석차
코드를 먼저 보여드릴게요.
myArray.enumerate()
myArray.enumerated()
myArray.reverse()
myArray.reversed()
각 Swift 3의 수정 방법에는 d가 추가되어 값이 반환되고 있음을 나타냅니다.그리고 수조가 정렬된 상황에서swift2.2는
sort()
을 사용하여 정렬된 그룹을 되돌려주고 sortInPlace()
은 내부 정렬을 실현한다.Swift 3.0에서 sort()
이 sorted()
sortInPlace()
이 sort()
으로 바뀌었다.이것 또한 이 Swift 2.2에서 sort()
은 수조로 돌아가고 Swift 3.0에서 직접 내부적으로 정렬된다는 것을 의미한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.