iOSã¨ã³ã¸ãã¢ã®é«ï¼@y_kohï¼ã§ãã
ãã®åº¦ãã¬ã¿ã§ã¯iPadã¢ããªã®Swift 3対å¿ãè¡ãã¾ãããã©ããªæãã§é²ããã®ãã¨ãããã£ãã¨ãããªã©å ±æã§ããã°ãªã¨æãã¾ãã
対å¿èªä½ã¯å»å¹´æ«ã«ã¯çµãã¦ãã¾ããããå¹´ãæãã¦1/10ã«ãªãªã¼ã¹ãã¾ããã å¹´æ«ã¯é£²é£åºãã¾ç¹å¿æã®ããããã¬ã¿ã§ã¯ãã®ææã®ã¢ããªã¢ãããã¼ãã¯æ§ãã¦ãã¾ããä¾å¹´ãã®ã¿ã¤ãã³ã°ã§ãªãã¡ã¯ã¿ãªã³ã°ãKaizenã¿ã¹ã¯ãªã©ãè¡ã£ã¦ãã¾ããä»åã¯Swift 3対å¿ãã¡ã¤ã³ã«è¡ãã¾ããã
å æ¥ãµã¼ããµã¤ããRailsã4.2ã«ãã¼ã¸ã§ã³ã¢ãããã¦ãã¾ããè¨èªããã¬ã¼ã ã¯ã¼ã¯ã®ãã¼ã¸ã§ã³ã¢ããã¯æ©è½æ¹åã«ç´æ¥ã¤ãªãããã®ã§ã¯ãªãã®ã§å¾åãã«ããã¡ã§ãããå°æ¥çã«è² åµã«ãªã£ã¦ãã¾ãã ããªã®ã§åºæ¥ãéãæéãä½ã£ã¦é©å®ã¢ãããã¼ãããããã«ãã¦ãã¾ãã
ä»åã®Swift 3対å¿ã«ã¤ãã¦ã¯ãæ¨å¹´ã®potatotips#35ã§ãçºè¡¨ããã¦ããã ãã¾ããã speakerdeck.com
æ¦è¦
ã³ã¼ãè¡æ°
9ä¸è¡ã»ã©
Swift使ç¨ç
ãã¬ã¿ã®ãã¼ã¹ã¯Objective-Cã§ããSwiftã®å ããå²åã¯å ¨ä½ã®2å²ã»ã©ã§ãããã³ã¢ãªUIé¨åããSwiftåãã¦ããã®ã§å²ãã¨è¤éãªã¨ãããå¤ãã§ããåºæ¬çãªã¹ã¿ã³ã¹ã¨ãã¦æ°è¦è¿½å ãããã¯ãªãã¡ã¯ã¿ãªã³ã°ãè¡ãã¿ã¤ãã³ã°ã§Swiftã使ç¨ããããã«ãã¦ãã¾ãã
ãã®çµæAPIãã¢ãã«å¨ããã¾ã Objective-Cã®ã¾ã¾ãªã®ã§ãä»å¾ã¯ãã¡ããè¨è¨è¦ç´ãã¨åããã¦å¯¾å¿ãã¦ãããã°ã¨æã£ã¦ãã¾ãã
æé
2ã3é±éã»ã©ãããã¾ããã
é²ãæ¹
ãããªæµãã§é²ãã¦ããã¾ããã
- ä½æ¥ãã©ã³ããåã
- ã©ã¤ãã©ãªãã¢ãããã¼ããã
- Xcodeã§Swift 3ã«Convertãã
- ã³ã³ãã¤ã«ã¨ã©ã¼ãã²ãããæ½°ã
- åä½ç¢ºèª
ä½æ¥ãã©ã³ããåã
iPadã¢ããªã¯ã¨ã³ã¸ãã¢3åä½å¶ã§éçºãã¦ããã®ã§ä»ã®éçºã¨ä¸¦è¡ãã¦ä½æ¥ãããã¨ã«ãªãã¾ããfeature/swift3
ãã©ã³ãã§ä½æ¥ãã¦ãdevelopã«å ãã£ãå¤æ´ãéæåãè¾¼ãã§ãããã¨ã«ãªãã¾ãã
å½ç¶ãªããdevelopããé¢ããã°é¢ããã»ã©å¤§å¤ã«ãªãã®ã§ãè¿ éãªå¯¾å¿ãæ±ãããã¾ãã
ã©ã¤ãã©ãªãã¢ãããã¼ããã
ã©ã¤ãã©ãªèªä½ãSwift 3対å¿ãã¦ããå¿ è¦ãããã®ã§å¯¾å¿ç¶æ³ã調æ»ããã¨ããããå§ãã¾ãã READMEã«ãã£ããæ¸ãã¦ãããã®ãããã°ãä½ãæ¸ããã¦ããããã©ã³ãã®ã¿ç¨æããã¦ãããã®ãããã¾ããææªã¡ã³ãããã¦ããªãå ´åã¯ä»ã®ã©ã¤ãã©ãªã«ä¹ãæããå¿ è¦ãåºã¦ãã¾ãã
ææçã«ãã»ã¨ãã©ã®ã©ã¤ãã©ãªã¯å¯¾å¿ããã¦ããã¨æãã¾ããããç¾ç¶å¯¾å¿ããã¦ããªããã°ä¹ãæããæ¤è¨ãããã»ããè¯ãããããã¾ããã
ã¾ãSwiftã©ã¤ãã©ãªã ãã§ãªããObjective-Cã©ã¤ãã©ãªãnullabilityã¢ããã¼ã·ã§ã³ã«å¯¾å¿ããã¦ããã±ã¼ã¹ãããã®ã§ç¢ºèªãã¦ã¿ãã¨è¯ãã¨æãã¾ãã
Xcodeã§Swift 3ã«Convertãã
convertãããã¨ããã¨ãããªæãã¢ã©ã¼ããåºã¦æ¥ã¦convertåºæ¥ãã«ãã°ããæ©ã¿ã¾ããã
http://stackoverflow.com/questions/39492974/tests-stop-working-under-xcode-8-test-host-error
ãã¡ãã«ããããã«ããã¹ãã¿ã¼ã²ããã®Testing > Target Application
ãNone
ã«ãããã¨ã§å¯¾å¿ã§ãã¾ããã
ã³ã³ãã¤ã«ã¨ã©ã¼ãã²ãããæ½°ã
ããããã¯ã³ã³ãã¤ã«ã¨ã©ã¼ãã²ãããæ½°ãã¦ããã¾ããã¨ã©ã¼æ°ãå¤ãã¨ã³ã³ãã¤ã©ãéä¸ã§è«¦ãã¦ãã¾ããããã¨ã©ã¼æ°ã®ç·éãç¥ããã¨ãåºæ¥ã¾ããããã£ã¦ãã¨ã©ã¼ã解æ¶ãã¦æ®ã¨ã©ã¼æ°ãæ¸ã£ã¦ããã¨ããã¨ããã§ã¬ãããªå¢ãããã¨ãããã¨ãç¹°ãè¿ãã¦ããã¨ã«ãªãã¾ãã
ããã«é¢ãã¦ã¯ã©ããããã¨ãåºæ¥ãªãã®ã§è«¦ããªãå¿ã§é å¼µãããç¡ãã§ããã³ãã¨ãã¦ã¯ãã¾ãå ¨ä½ãç¥ãããã«ãã¨ã©ã¼è§£æ¶ãé£ããã¨ããã¯ã¡ããã¨ã¡ã¢ã«æ®ããä¸ã§ãã³ã¡ã³ãã¢ã¦ããã¦ã§ãä¸æ¦éãã®ãè¯ãã¨æãã¾ãã
主è¦ã©ã¤ãã©ãªå¯¾å¿
SwiftBond
Migration from v4.x to v5.0ãåèã«Migrationãã¾ãã
observeNew
ãããã£ã¨ç¡ããªã£ã¦ããã®ã§skip
ã§ä»£ç¨ãã¾ãã
hoge.skip(first: 1).observeNext
ã¾ããbnd_notification
ã®å ´åã¯å®ç¾©æã«ã¯ã¯ãã¼ã¸ã£ã¯èµ°ããªããªã£ã¦ããã®ã§skip
ããå¿
è¦ã¯ããã¾ãããããã«æ°ã¥ãããªããä¸åç®ã ãæåãããããã¨ããã®ã§ãããã¾ãããã
ã©ã¤ãã©ãªä»¥å¤ã§ã®å¤æ´
DispatchOnce
Swift 3 ããã¯dispatch_once
ã«ç¸å½ãããã®ãæä¾ãããªããªãã¾ããã
ãã¡ãã¯lazy initialized globalsãããã¯staticããããã£ã§ä»£ç¨ã§ãã¾ãã
ãã¡ãã®è¨äºã«è©³ããã¾ã¨ãããã¦ããã®ã§åç §ãã¦ã¿ãã¨è¯ãã¨æãã¾ãã Swift3のGCD周りのまとめ - Qiita
Date
Swift 3ããNSDateã®Siwftå®è£ Dateãæä¾ãããããã«ãªãã¾ãããããã«ãããMTDatesã¨ããObjective-Cã©ã¤ãã©ãªã使ç¨ãã¦ããã®ã§ãããNSDateã®ã«ãã´ãªå®è£ ã®ããDateã§ã¯ä½¿ãã¾ããããã£ã¦ãã®æ§ã«ãã£ã¹ãããå¿ è¦ãããã¾ãã
ãã®æã¯ã¾ããã«ããéããã¨ãç®æ¨ã«ãã¦ããã®ã§ãå°éã«æ¸ãæãã¦ã¾ããããå¾ã«ããªãã¸ããããã®Date Extensionãä½ã£ã¦ã¾ãã
(reservation.startAt as NSDate).tr_startOfToday())
CGFloat ã®å°ä½
ããã¯å°ãé©ããå¤æ´ã§ããã
y % heightByHour â y.truncatingRemainder(dividingBy: heightByHour)
https://developer.apple.com/reference/swift/floatingpoint/1847167-truncatingremainder
Intåã®å ´åã¯ãã¾ã¾ã§ã©ãã%
ã使ãã¾ãã
@escaping
Swift 3 の @escaping とは何か - Qiita
@noescapeãdeprecatedã«ãªããéã«@escapingãå¿ é ã«ãªãã¾ããã
@escapingã®æãç¡ãã§å¥ã¡ã½ããæ±ãã«ãªãã¿ããã§ãinterfaceã«@escapingãä»ãå¿ããã¨ãã«å¼ã¹ãªãã¨ãããã¨ãããã¾ããã
removeRange
ã¨ã©ã¼å 容ããããã«ããã¦ã¡ãã£ã¨æ©ã¿ã¾ããã
courseLabels.removeRange(CountableRange<Int>(courses.count ..< courseLabels.count)) â courseLabels.removeSubrange(CountableRange<Int>(courses.count..<courseLabels.count))
iOS 10対å¿
ã¦ã¼ã¶ã¼ãã¼ã¿ã¢ã¯ã»ã¹
åçé¸ææã«ã¨ã©ã¼ã«ãªãã¾ããã
This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.
iOS 10 ããInfo.plist
ã«ã¦ã¼ã¶ã¼ãã¼ã¿ã¸ã¢ã¯ã»ã¹ããç®çã®è¨è¿°ãå¿
é ã«ãªã£ã¦ããã®ã§ãã¡ãã対å¿ãã¾ãããã
[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです | Developers.IO
ãã®ä»
ãã¹ããåããªã
Could not determine bundle identifier for xxxTest TEST_HOST: some path that does not exist
ãããªã¨ã©ã¼ãåºã¦ãã¾ãããããã¹ãã¿ã¼ã²ããã®HostApplicationãåãæ¿ãã¦ã¿ããåãã¾ããã
IUOãç¡ããªã£ãå½±é¿ã§ãæååå å¼å±éã§Optionalãåºåããã¦ãã¾ã£ã
ã©ãã«ã«ãã®ã¾ã¾"Optional(y_koh)"ã®ããã«è¡¨ç¤ºããã¦ãã¾ãã¾ãããããã¯Unwrapãããã¨ã§å¯¾å¿ãã¾ããã
var user = User() // modelã¯Objective-Cã§nullabilityã¢ããã¼ã·ã§ã³æå®ãªã var label = UILabel() label.name = user.name
â
var user = User() // modelã¯Objective-Cã§nullabilityã¢ããã¼ã·ã§ã³æå®ãªã var label = UILabel() if let user = user { label.name = user.name }
Swift 3 対応時にハマったString Interpolate - Qiita
iOS 9ã§ã¯ã©ãã·ã¥
Swift 3ã¨ãããSDKã®éãããããã¾ããã
let cell: TableLayoutListCell = tableView.dequeueReusableCell(withIdentifier: "ReservationCell", for: indexPath) as! TableLayoutListCell
ä¸è¨ãå®è¡ããã¨ã
- iOS 9
layoutSubviews
ãå¼ã°ãã - iOS 10
layoutSubviews
ãå¼ã°ããªã
ã¨ãªã£ã¦æåãå¤ãã£ã¦ãã¾ããä»åã¯å ã«layoutSubviewsãå¼ã°ãããã¨ãæ³å®ãã¦ããªãã³ã¼ãã«ãªã£ã¦ããã®ã§Unwrapæã«nilã§è½ã¡ã¦ãã¾ããã
ã¾ã¨ã
Swift 3対å¿ã¯ã¢ããªã®è¦æ¨¡ã«ãããã¾ãããããªãæ ¹æ°ã®ããä½æ¥ã¨ãªãã¾ãããããã対å¿ãããæ¹ã¯æåããå®ç§ã«ãããã¨ããã«ã¾ãã¯ã³ã¡ã³ãã¢ã¦ãããªããã§ããã«ããéããã¨ãç®æ¨ã«ããã¨è¯ãã¨æãã¾ãã
å°ãã§ãããããSwift 3対å¿ãããæ¹ã®å©ãã«ãªãã°å¹¸ãã§ãã