27897


外部フレームワークとしましてRealmを使用し、  
CLLocationから値を取得しまして

[code]

    var locationManager: CLLocationManager!
    var locations: Results<Location>!
    
    
    // Make Location from CLLocation
    private func makeLocation(rawLocation: CLLocation) -> Location {
        let location = Location()
        location.latitude = rawLocation.coordinate.latitude
        location.longitude = rawLocation.coordinate.longitude
    
        return location
    
[/code]

である場合に

[code]

    let location = locations
    
[/code]

としまして

[code]

    let valString:String = "\(location.latitude),\(location.longitude)"
    
[/code]

というようにStringにしたいと考えていますが、 `Value of type 'Results<Location>' has no member
'latitude'`というエラーになってしまいます。どのような解決方法がございますでしょうか。よろしくお願い致します。


CC BY-SA 3.0
2016-07-27T11:56:04.837
27888
2016-07-28T11:52:02.440
2016-07-27T16:58:10.190
5519
14780
question
swift ios xcode
Value of type 'Results' has no member 'latitude’


`locations`は`Results<Location>`型のオブジェクトなので、それには`latitude`や`longitude`というプロパティはありません。  
`let location = locations`はただ別の名前の変数に入れただけなので中身は変わっていません。

`latitude`や`longitude`など`Location`クラスのオブジェクトのプロパティにアクセスするには、まず`locations`から要素である`Location`型のオブジェクトを取り出す必要があります。

`Results<T>`から要素を取り出すには下記に示す方法があります。

  1. Subscriptingを使う。
[code]     let location = locations[0]

    let valString = "\(location.latitude),\(location.longitude)"
    
[/code]

  2. `first`や`last`を使う
[code]     let location = locations.first!

    let valString = "\(location.latitude),\(location.longitude)"
    
[/code]

^ 上記の`first`/`last`の戻り値はオプショナルなので必要に応じてアンラップする必要があります。

  3. 要素をイテレートする
[code]     for location in locations {

        let valString = "\(location.latitude),\(location.longitude)"
    
[/code]

上記以外にも`Results`の要素を取り出す方法はありますが、主なものはこんなところです。  
より詳しくはドキュメント <https://realm.io/jp/docs/swift/latest/> をご覧ください。


CC BY-SA 3.0
2016-07-27T17:00:58.783
27897
2016-07-27T17:00:58.783
5519
27888
answer