質問するログイン新規登録

回答編集履歴

2

error != nil は正常系なので判定修正

2017/11/13 17:01

投稿

star__hoshi
star__hoshi

スコア13

answer CHANGED
@@ -25,7 +25,7 @@
25
25
  本筋とは関係ないですが、 response!.routes.isEmpty の `!` でエラーになる可能性がありますので以下のように `!` を使わずに書くほうが良いです。
26
26
 
27
27
  ```swift
28
- if error != nil {
28
+ if error == nil {
29
29
  return
30
30
  }
31
31
  guard let response = response else {

1

エラーとなっていた原因が間違っていたので修正

2017/11/13 17:01

投稿

star__hoshi
star__hoshi

スコア13

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ```swift
4
4
  let directions = MKDirections(request: myRequest)
5
- directions.calculate { response, error in
5
+ directions.calculate(completionHandler: {(response, error) -> Void in
6
6
  _ = response!.routes.count
7
7
  if (error != nil || response!.routes.isEmpty) {
8
8
  return
@@ -13,11 +13,11 @@
13
13
  }
14
14
  ```
15
15
 
16
- エラーになっていた原因は、 `(response:MKDirectionsResponse!, error:NSError!)` にあると思います。
16
+ エラーになっていた原因は、 `as! MKDirectionsHandler` にあると思います。
17
- `MKDirectionsHandler` は response が正常に取得できたら error には nil が入ってきます。 nil に対して `!` をしてしまう存在しないものに対するアクセスになってしまうためエラーが起きす。
17
+ `(response:MKDirectionsResponse!, error:NSError!) -> Void in` の書き方だ handler ってないため実行時エラーが起きているようです。
18
+ おそらく Xcode のエラーででてくる補完を利用したと思うのですが、あれはあまりアテにしてはいけません。
18
19
 
19
- また、 `MKDirectionsHandler` を扱うにas! などを使わなくとも `directions.calculate { response, error in` のようにアクセスできますので、一般的にはこう書きます。
20
+ また、 `MKDirectionsHandler` は `directions.calculate { response, error in` のようにアクセスできますので、一般的にはこう書きます。
20
-
21
21
  この書き方は Trailing Closure というのですが、最初のうちは深く考えずにこういう風に書ける記法があると思えば問題ないと思います。 [[Swift] Closureについてメモ \- Qiita](https://qiita.com/edo_m18/items/1d93af7de75c6d415f19#trailing-closures)
22
22
 
23
23
  ---