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

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

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

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

Q&A

解決済

1回答

2934閲覧

dataTaskにおける型の変数エラー

SatoshiKomatsu

総合スコア14

Swift

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

0グッド

0クリップ

投稿2017/06/25 09:16

###前提・実現したいこと
https://teratail.com/questions/58751?sort=1#2014と同じトラブルで困っています。

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

基本的には治ったのですが、コマンド+クリックで定義に飛び、ファンクションの型を変更できずに困っています。

cannot convert value of type '(NSURLResponse!, NSData!, NSError!) - Void' to expected argument type '(NSURLResponse?, NSData?, NSError?) -> Void'

コマンド+クリックを押しても?マークがでるだけです。どうしたらよろしいでしょうか?
###該当のソースコード

import UIKit class ViewController: UIViewController { @IBOutlet weak var ZipTextField: UITextField! @IBAction func tapReturn() { } @IBAction func tapSearch() { guard let ziptext = ZipTextField.text else{ //値がnilだったら、終了する return } //リクエストするURLを作る let urlStr = "http://api.zipaddress.net/?zipcode=\(ziptext)" if let url = NSURL(string: urlStr) { //urlオブシェクトがnilでなかったら、検索処理オブジェクトを作ります let urlSession = URLSession.shared //「検索処理が完了したら、onGetAddressを呼び出す」というタスクを作ります let task = urlSession.dataTask(with: url as URL, completionHandler: self.onGetAddress) //↑エラーはこの上の文章です task.resume() } } func onGetAddress(data: NSData?, res: URLResponse?, error: NSError){ //確認のためdataを表示します print(data) } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

確かにクリックしても、定義には飛びませんね。一つに絞り込めないからかな。
でも、問題ありません。そもそもエラーメッセージだけで解決できる話です。

提示されたソースコードとエラーに整合性がありません。以下のような出力になるはずです。

Cannot convert value of type '(NSData?, URLResponse?, NSError) -> ()' to expected argument type '(Data?, URLResponse?, Error?) -> Void'

to expectedから左側が現状あなたが書いたもの、右側がXcode様が要求しているものです。
(NSData?, URLResponse?, NSError)ではなく、(Data?, URLResponse?, Error?)のようにしろと言ってます。

あなたのソースコードに当てはめると、このようになります。

swift

1 func onGetAddress(data: NSData?, res: URLResponse?, error: NSError){ 2 //確認のためdataを表示します 3 print(data) 4 }

swift

1 func onGetAddress(data: Data?, res: URLResponse?, error: Error?){ 2 //確認のためdataを表示します 3 print(data) 4 }

画面上の[Help]->[Documentation and API Reference]も利用してみてください。
リファレンス

投稿2017/06/25 18:50

izkn

総合スコア1698

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

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

SatoshiKomatsu

2017/06/26 01:59

できました!解説も明快で分かりやすかったです!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問