質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

解決済

Swift3でのカレンダー実装について

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1回答

0リアクション

0クリップ

5943閲覧

投稿2017/01/14 05:12

###前提・実現したいこと
iOSにてカレンダーのアプリを作るため、以下の記事を参考に製作しています。
http://qiita.com/sakuran/items/3c2c9f22cbcbf4aff731

###発生している問題・エラーメッセージ
現在swift3で作っていますが、記事がswift3以前のモノだったのでエラーが発生し、解決できていない状況です。

###該当のソースコード
ソース途中のコメント部がエラーメッセージです

swift

ViewController.siwft //headerの月を変更 func changeHeaderTitle(date: NSDate) -> String { let formatter: DateFormatter = DateFormatter() formatter.dateFormat = "M/yyyy" let selectMonth = formatter.string(from: date as Date) //Cannot convert value of type 'NSDate' to type 'Date' in coercion 'エラー1' return selectMonth } //①タップ時 @IBAction func tappedHeaderPrevBtn(sender: UIButton) { selectedDate = dateManager.prevMonth(selectedDate) calenderCollectionView.reloadData() //Value of type 'DataManager' has no member 'prevMonth' 'エラー2' headerTitle.text = changeHeaderTitle(date: selectedDate) } //②タップ時 @IBAction func tappedHeaderNextBtn(sender: UIButton) { selectedDate = dateManager.nextMonth(selectedDate) calenderCollectionView.reloadData() //Value of type 'DataManager' has no member 'nextMonth' 'エラー3' headerTitle.text = changeHeaderTitle(date: selectedDate) } //セルのサイズを設定 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { let numberOfMargin: CGFloat = 8.0 let width: CGFloat = (collectionView.frame.size.width - cellMargin * numberOfMargin) / CGFloat(daysPerWeek) let height: CGFloat = width * 1.0 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/ツール等のバージョンなど)
足りない情報等あれば追記致します。
エラーが多いですが、よろしくお願いします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2017/01/16 06:04

こちらの質問が他のユーザーから「過去の低評価」という指摘を受けました。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています