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

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

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

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

Swift

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

Q&A

解決済

1回答

654閲覧

Swiftの関数の呼び出しに関して質問です。

takeshi1907

総合スコア54

iOS

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

Swift

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

0グッド

0クリップ

投稿2017/12/22 03:03

編集2017/12/22 03:04

Swiftの関数の呼び出しに関して質問です。

質問内容はcheckPocket("どこでもドア")で関数を呼び出していて、 関数はfunc checkPocket() -> (String) -> Stringとなっています。

構文Aのように引数は(intValue: Int)の様に()の中に書くものだと思っているのですが何故 構文Bは()の外に出ているのでしょうか?

また、 -> (String) -> String の様に戻り値が二つあるのはなぜでしょうか?

構文A:
func method(intValue: Int) -> Bool {
return true
}
method(1)

構文B
参考:http://dev.eyewhale.com/archives/1217

class Doraemon {

var poket = Dictionary<String,AnyObject>() init(){ poket["タケコプター"] = "Takekoputer 9-inch,Late 2013" } // 引数にstringを受け取り、stringを返すクロージャを生成・返却する func checkPocket() -> (String) -> String { return { // キャプチャリストは  [参照方式 対象,参照方式 対象 ・・・] という形で記述する // この例では self を unowned で参照 [unowned self] (itemname:String) -> String in if self.poket[itemname] { return "(itemname)は持ってるよ。僕ドラえもん。" } else { return "(itemname)は今修理中。" } } }

}

let dora = Doraemon()
let checkPocket = dora.checkPocket()
NSLog(checkPocket("どこでもドア"))
NSLog(checkPocket("タケコプター"))
// どこでもドアは今修理中。
// タケコプターは持ってるよ。僕ドラえもん。

宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

何故 構文Bは()の外に出ているのでしょうか?

括弧の外に出ているのは引数ではなく戻り値です。

また、 -> (String) -> String の様に戻り値が二つあるのはなぜでしょうか?

二つではありません。戻り値は(String) -> Stringという型になります。
これは Stringを受け取ってStringを返す 関数です。

swift

1func hogehoge(string: String) -> String { 2 return string + "!" 3} 4print(type(of: hogehoge(string:))) 5//=> (String) -> String 6print(hogehoge(string: "hello")) 7//=> hello! 8 9//関数を変数に代入 10let hoge = hogehoge(string:) 11print(type(of: hoge)) 12//=> (String) -> String 13print(hoge("hello")) 14//=> hello!

投稿2017/12/22 04:08

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問