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

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

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

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

Xcode

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

Swift

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

Q&A

2回答

1905閲覧

[swift]string型の数値をint型に変更し計算をする方法

ricoyasu..

総合スコア14

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/05/28 16:41

編集2022/01/12 10:55

前提・実現したいこと

デートピッカーに入力された生年月日のデータを遷移させ、次の画面のラベルにて年齢を表示したいです。

Xcodeで簡単な年齢計算のアプリを作っています。
デートピッカーにて入力されたデータを次の画面に遷移させ、現在の日付との差分から○才○ヶ月○日というようにラベルに表示したいです。
生年月日データの値渡し、現在の日付の取得までは成功しています。

生年月日から現在の日時までの差分を求めるコードでエラーが発生してしまいました。

発生している問題・エラーメッセージ

swift

1Cannot invoke 'dateComponents' with an argument list of type '([Int?], from: String?, to: Date)'

該当のソースコード

swift

1import UIKit 2 3class mainViewController: UIViewController { 4 5 @IBOutlet weak var birthDate: UILabel! 6 7 var birthText: String? 8 var yyyy: Int? 9 var MM: Int? 10 var dd: Int? 11 12 let calendar = Calendar(identifier: .gregorian) 13 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 birthDate.text = birthText 19 let birthDate = DateComponents(calendar: calendar, year: yyyy, month:MM, day: dd).date! 20 21 22 let now = NSDate() 23 let formatter = DateFormatter() 24 formatter.dateFormat = "yyyy/MM/dd" 25 let nowTime = formatter.string(from: now as Date) 26 27 28 //↓こちらのコードでエラーが起きています。 29 let elapsedComps = calendar.dateComponents([yyyy, MM, dd], from: birthText, to: nowTime) 30 String(format: "生後%d年%dヶ月%d日", elapsedComps.yyyy!, elapsedComps.MM!, elapsedComps.dd!) 31 32 } 33 } 34

試したこと

birthTextとnowTimeがString型になっていて計算ができないと考えたので、Int型に型変換をしてみたのですがうまくいきませんでした。
はじめての質問でわかりにくい箇所もあるかと思いますが、ご指導いただけたら嬉しいです。
どうぞよろしくお願いします。

補足情報(FW/ツールのバージョンなど)

型変換は、
let str = nowTime
let num = Int(str)!
と試しました。
また最初の宣言部分の
var...String?の部分をInt?に変更も試しました。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2019/05/29 00:39

質問文から不要なテキストを削除して下さい。
ricoyasu..

2019/05/29 03:44

修正いたしました。 ご指摘、どうもありがとうございます。
guest

回答2

0

dateComponents(_:from:to:) を使おうとしているのであれば引数が違います。
fromtoもDate型です。

componentsは、必要なものを Set<Calendar.Component>型 で指定します。
年月日だけ必要なのであれば [.year, .month, .day] です。

投稿2019/05/29 05:36

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ricoyasu..

2019/05/29 16:18

ありがとうございます! 修正してみました。 ''' func dateComponents([.year,.month,.day]Set<Calendar.Component>, from start: birthDate, to end: nowDate) -> DateComponents ''' 上記のように記述したところ、新たにエラーが出てしまいました。 ①Expected parameter name followed by ':' ②Use of undeclared type 'birthDate' ③Use of undeclared type 'nowDate' ①のエラーが調べてもよくわかりませんでした・・ また宣言をしているはずなのに②③のエラーはなぜ出ているのでしょうか? 教えていただけたらうれしいです。
fuzzball

2019/05/30 01:42

それは関数を定義するときの書き方です。 呼び出して下さい。
guest

0

まずエラーメッセージをよく読みましょう。

英語が苦手なら、まず翻訳サイトにでもコピペして、だいたいの雰囲気を掴んで下さい。
その上でもう一度原文に立ち返りましょう。ポイントは

  • 'dateComponent'
  • argument list
  • type

です。

その後は dateComponents について調べることになると思いますが、
出来れば Apple 公式のドキュメントを読むのがいいです。
英語ですが、それでも「翻訳サイトでだいたいの雰囲気を掴む」「細かいところは英和辞書を引く」である程度の情報は得られるかと。

投稿2019/05/28 22:32

編集2019/05/28 22:38
kagilinn

総合スコア354

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ricoyasu..

2019/05/29 16:21

ありがとうございます! 思い込みで質問してしまっていました。 エラー文を解読する努力をもっとしていこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問