🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

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

Q&A

解決済

1回答

816閲覧

swiftでイニシャライズに引数を渡すときにエラーが出る

moriman

総合スコア615

Swift

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

0グッド

0クリップ

投稿2019/10/15 02:57

swiftの勉強で書籍のサンプルを動かしているのですが、

swift

1struct Item{ 2 3 let id:Int 4 5 let title:String 6 7 8 init?(dictionary:[String:Any]){ 9 10 guard let id=dictionary["id"] as? Int,let title=dictionary["title"] as? String else{ 11 12 return nil 13 14 } 15 16 self.id=id 17 18 self.title=title 19 20 } 21 22 23} 24 25 26let dictionaries:[[String:Any]]=[ 27 28 ["id":1,"title":"abc"], 29 30 ["id":2,"title":"def"], 31 32 ["title":"ghi"], 33 34 ["id":4,"title":"jkl"], 35 36] 37 38 39for d in dictionaries{ 40 41 if let item=Item(d:Dictionary){ 42 43 print(item) 44 45 }else{ 46 47 print("エラー:辞書(d)からItemを生成できません") 48 49 } 50 51}

上記サンプルを実行したところ、
if let item=Item(dictionary:Dictionary){
の行で、

main.swift:23:33: error: cannot convert value of type 'Dictionary<_, _>.Type' to expected argument type '[String : Any]' if let item=Item(dictionary:Dictionary){ ^~~~~~~~~~

上記のようなエラーが出ました。変数dictionariesは、「[String:Any]を要素に持つ配列」として型を
指定していますので、その要素一つ一つをfor文でイニシャライザの引数に渡すのは問題無いような気がするのですが、原因がわかりません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

上記の場合、関数を呼び出す際は 関数名(関数ラベル: 値) という形になりますので

if let item=Item(d:Dictionary){

ではなく

if let item=Item(dictionary:d){

で解決しそうです。

【補足】
エラー文にあるitem=Item(dictionary:Dictionary)というコードが質問文になかったので少し戸惑いましたが、該当部分の記載ミスと想定して回答しております。

投稿2019/10/15 05:32

Kapustin

総合スコア1186

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

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

moriman

2019/10/16 01:40

回答を頂きましてありがとうございます。 ご指摘の通り修正したら解決しました。 関数定義時と実行時の引数指定の基本を覚え違いしていました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問