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

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

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

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

Swift

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

Q&A

解決済

1回答

1750閲覧

引数が簡単な整数などではない関数の戻り値を外で定義したい

退会済みユーザー

退会済みユーザー

総合スコア0

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/07/27 12:17

編集2017/07/28 12:45

*やりたいこと
この関数から得られた現在位置の座標を別の関数2つの座標から角度や距離を求めるに使用したい。
その上で、現在位置を戻り値で返したい。
戻り値を関数の外で定数で定義したときにエラーが起きます。

/*情報追加部分
*起きるエラー
let nowTimeCoordinate = locationManager(_ manager: CLLocationManager didUpdateLocations locations: [CLLocation])

を以下のようにxcode様に言われるがまま訂正

let nowTimeCoordinate = locationManager(_, manager: CLLocationManager, didUpdateLocations, locations: [CLLocation])
起きるエラー

use of unresolved identifier 'didUpdateLocations'
情報追加終わり*/
直す前のコード

swift

1func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){ 2 let location = locations.first 3 let nowTimelatitude = location?.coordinate.latitude//Optional<Double> 4 let nowTimelongitude = location?.coordinate.longitude//Optional<Double> 5 6 print("現在位置の緯度: \(nowTimelatitude!)\n現在位置の経度: \(nowTimelongitude!)") 7 8// return (nowTimelatitude,nowTimelongitude) as! (nowTimelatitude: Double, nowTimelongitude: Double) 9 } 10 11// return (今の座標) ができればいい 12let nowTimeCoordinate = locationManager(_ manager: CLLocationManager didUpdateLocations locations: [CLLocation]) 13

試行錯誤後コード

swift

1 private func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) -> (Double,Double){ 2 let location = locations.first 3 let nowTimelatitude = location?.coordinate.latitude//Optional<Double> 4 let nowTimelongitude = location?.coordinate.longitude//Optional<Double> 5 6 print("現在位置の緯度: \(nowTimelatitude!)\n現在位置の経度: \(nowTimelongitude!)") 7 8// print(type(of: nowTimelatitude))//Optional<Double>型判定 9// print(type(of: nowTimelongitude))//Optional<Double> 10 11 return (nowTimelatitude,nowTimelongitude) as! (nowTimelatitude: Double, nowTimelongitude: Double) //戻り値で指定すれば他の関数でも使えるのでは? 12 } 13 14let nowTimeCoordinate = locationManager(_, manager: CLLocationManager, didUpdateLocations, locations: [CLLocation]) //うまくいかない。現在位置の戻り値を受け取りたい。

xcodeさんに指摘されたとおり直したので、どうしてprivateをつけなきゃいかんのかreturn () as!()のas!以下もよく分かってないが、お聞きしたいのは引数が簡単な整数などではないこの関数の戻り値を関数の外で定義するときにスコープの関係でエラーが出るのはどうしたらいいのかということなのです。

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

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

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

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

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

fuzzball

2017/07/28 00:22

「printするときにスコープの関係でエラーが出る」というのは関数の中央にあるprint文のことでしょうか?どういうエラーが出るのか書いて下さい。
guest

回答1

0

ベストアンサー

locationManager(_:didUpdateLocations:)に戻り値はありませんので、returnで返すことは出来ません。

この関数内から外部(インスタンス変数や、UIのプロパティなど)に値を渡して下さい。

投稿2017/07/28 12:58

fuzzball

総合スコア16731

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

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

退会済みユーザー

退会済みユーザー

2017/07/30 09:24

戻り値があるなしはどこで判断すればいいのですか?
退会済みユーザー

退会済みユーザー

2017/08/02 10:58

すいません。関数内から外部にインスタンス変数に値を渡す。の意味が分かりません。それはこの関数があるクラスのインスタンスを作ってそのインスタンス.関数名()をやればいいのかなと思ったのですが違うようです。 BAした後に申し訳ありません。これは私の浅薄さと軽薄さを忍んでお聞きします。
fuzzball

2017/08/02 11:03 編集

ここで得た情報(緯度、経度?)を、どうしたいのでしょうか?
退会済みユーザー

退会済みユーザー

2017/08/02 11:28

2点の座標(現在地と目的地)から目的地の方角を割り出したいのです。そのためにはhttp://qiita.com/arthur87/items/23d3c896dafbc8223fd5にあるsample1.swiftのprint(angle(a:Point(x: 0, y: 0), b: Point(x: 5, y: 5)))というprint文をa:(x:現在地緯度y:現在地経度).b:(x:目的地緯度,y:目的地経度)にすれば良いのではと考えていたのですが...
fuzzball

2017/08/02 16:40

locationManager(_:didUpdateLocations:)の中にprint(angle(a:(x:現在地緯度y:現在地経度).b:(x:目的地緯度,y:目的地経度)))を書けばいいのでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問