###前提・実現したいこと
iOSにてカレンダーのアプリを作るため、以下の記事を参考に製作しています。
http://qiita.com/sakuran/items/3c2c9f22cbcbf4aff731
###発生している問題・エラーメッセージ
現在swift3で作っていますが、記事がswift3以前のモノだったのでエラーが発生し、解決できていない状況です。
###該当のソースコード
ソース途中のコメント部がエラーメッセージです
swift
1ViewController.siwft 2 //headerの月を変更 3 func changeHeaderTitle(date: NSDate) -> String { 4 let formatter: DateFormatter = DateFormatter() 5 formatter.dateFormat = "M/yyyy" 6 let selectMonth = formatter.string(from: date as Date) //Cannot convert value of type 'NSDate' to type 'Date' in coercion 'エラー1' 7 return selectMonth 8 } 9 10 //①タップ時 11 @IBAction func tappedHeaderPrevBtn(sender: UIButton) { 12 selectedDate = dateManager.prevMonth(selectedDate) 13 calenderCollectionView.reloadData() //Value of type 'DataManager' has no member 'prevMonth' 'エラー2' 14 headerTitle.text = changeHeaderTitle(date: selectedDate) 15 } 16 17 //②タップ時 18 @IBAction func tappedHeaderNextBtn(sender: UIButton) { 19 selectedDate = dateManager.nextMonth(selectedDate) 20 calenderCollectionView.reloadData() //Value of type 'DataManager' has no member 'nextMonth' 'エラー3' 21 headerTitle.text = changeHeaderTitle(date: selectedDate) 22 } 23 24 //セルのサイズを設定 25 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 26 let numberOfMargin: CGFloat = 8.0 27 let width: CGFloat = (collectionView.frame.size.width - cellMargin * numberOfMargin) / CGFloat(daysPerWeek) 28 let height: CGFloat = width * 1.0 29 return CGSizeMake(width, height) // 'CGSizeMake' is unavailable in Swift 'エラー4'
DateManager.siwft import UIKit extension NSDate { func monthAgoDate() -> NSDate { let addValue = -1 let calendar = NSCalendar.current let dateComponents = NSDateComponents() dateComponents.month = addValue return calendar.dateByAddingComponents(dateComponents, toDate: self, options: NSCalendar.Options(rawValue: 0))! // Value of type 'Calendar' has no member 'dateByAddingComponents' ’エラー5’ } func monthLaterDate() -> NSDate { let addValue: Int = 1 let calendar = NSCalendar.current let dateComponents = NSDateComponents() dateComponents.month = addValue return calendar.dateByAddingComponents(dateComponents, toDate: self, options: NSCalendar.Options(rawValue: 0))!// Value of type 'Calendar' has no member 'dateByAddingComponents' ’エラー6’ } } class Date: NSObject { //省略 //前月の表示 func prevMonth(date: NSDate) -> NSDate { let currentMonthOfDates = [] // Empty collection literal requires an explicit type ’エラー7’ selectedDate = date.monthAgoDate() //User of unresolved identifier 'selectedDate' ’エラー8’ return selectedDate //User of unresolved identifier 'selectedDate' ’エラー9’ } //次月の表示 func nextMonth(date: NSDate) -> NSDate { currentMonthOfDates = [] //User of unresolved identifier 'currentMonthOfDates' ’エラー10’ selectedDate = date.monthLaterDate() //User of unresolved identifier 'selectedDate' ’エラー11’ return selectedDate //User of unresolved identifier 'selectedDate' ’エラー12’ } } class DateManager: NSObject { var currentMonthOfDates = [NSDate]() //表記する月の配列 var selectedDate = NSDate() let daysPerWeek: Int = 7 var numberOfItems: Int! //月ごとのセルの数を返すメソッド func daysAcquisition() -> Int { let rangeOfWeeks = NSCalendar.current.range(of: NSCalendar.Unit.weekOfMonth, in: NSCalendar.Unit.month, for: firstDateOfMonth() as Date) //Cannot convert value of type 'NSCalendar.Unit' to expected argument type 'Calendar.Component' ’エラー13’ let numberOfWeeks = rangeOfWeeks.length //月が持つ週の数 numberOfItems = numberOfWeeks * daysPerWeek //週の数×列の数 return numberOfItems } //月の初日を取得 func firstDateOfMonth() -> NSDate { let components = NSCalendar.currentCalendar.components([.Year, .Month, .Day], //Type of expression is ambiguous without more context ’エラー14’ fromDate: selectedDate) components.day = 1 let firstDateMonth = NSCalendar.currentCalendar().dateFromComponents(components)! return firstDateMonth } // ⑴表記する日にちの取得 func dateForCellAtIndexPath(numberOfItems: Int) { // ①「月の初日が週の何日目か」を計算する let ordinalityOfFirstDay = NSCalendar.currentCalendar.ordinalityOfUnit(NSCalendar.Unit.Day, inUnit: NSCalendar.Unit.WeekOfMonth, forDate: firstDateOfMonth()) // Value of type 'Calendar' has no member 'ordinalityOfUnit' ’エラー15’ for i in 0 ..< numberOfItems { // ②「月の初日」と「indexPath.item番目のセルに表示する日」の差を計算する let dateComponents = NSDateComponents() dateComponents.day = i - (ordinalityOfFirstDay - 1) // ③ 表示する月の初日から②で計算した差を引いた日付を取得 let date = NSCalendar.currentCalendar.dateByAddingComponents(dateComponents, toDate: firstDateOfMonth(), options: NSCalendar.Options(rawValue: 0))! //Value of type 'Calendar' has no member 'dateByAddingComponents' ’エラー16’ // ④配列に追加 currentMonthOfDates.append(date) } } // ⑵表記の変更 func conversionDateFormat(indexPath: NSIndexPath) -> String { dateForCellAtIndexPath(numberOfItems: numberOfItems) let formatter: DateFormatter = DateFormatter() formatter.dateFormat = "d" return formatter.string(from: currentMonthOfDates[indexPath.row] as Date) // Cannot convert value of type 'NSDate' to type 'Date' in coercion ’エラー17’ } }
###試したこと
色々調べて試しましたが解決できないため質問させていただきました。
よろしくお願いいたします。
###補足情報(言語/FW/ツール等のバージョンなど)
足りない情報等あれば追記致します。
エラーが多いですが、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/17 01:58 編集
2017/01/17 07:02
退会済みユーザー
2017/01/18 16:16