をこの答えはTIMの答えの微調整バージョンです。以下のプロパティは変更の対象となります。
RLMObject
はMKPlacemark
プロパティタイプを持つことはできません。 mkPlacemarkはset
を持つことはできません。 get
&を持つことができます。これは、ストアドプロパティではなくインスタンス変数として機能します。 iOS 9+用に更新されました。新しい連絡先フレームワークを使用します。 super.init()
はに、これは誰にも役立ちます場合、それは素晴らしいことだself.init()
import Foundation
import MapKit
import RealmSwift
import Contacts
class RLMPlacemark: Object {
dynamic var latitude = 0.0
dynamic var longitude = 0.0
dynamic var street: String?
dynamic var city: String?
dynamic var state: String?
dynamic var zipCode: String?
dynamic var country: String?
dynamic var countryCode: String?
public var placemark: MKPlacemark {
get {
let coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
let addressDictionary = [CNPostalAddressStreetKey : street,
CNPostalAddressCityKey : city,
CNPostalAddressStateKey : state,
CNPostalAddressPostalCodeKey : zipCode,
CNPostalAddressCountryKey : country,
CNPostalAddressISOCountryCodeKey : countryCode]
let warningFreeAddressDictionary = (addressDictionary as Any) as? [String : Any]
return MKPlacemark(coordinate: coordinate, addressDictionary: warningFreeAddressDictionary)
}
}
convenience init(lat: Double, long: Double, street: String?, city: String?, state: String?, zipCode: String?, country: String?, countryCode:String?) {
self.init()
self.latitude = lat
self.longitude = long
self.street = street
self.city = city
self.state = state
self.zipCode = zipCode
self.country = country
self.countryCode = countryCode
}
convenience init(placemark: MKPlacemark) {
self.init(lat: placemark.coordinate.latitude,
long: placemark.coordinate.longitude,
street: placemark.addressDictionary?[CNPostalAddressStreetKey] as? String,
city: placemark.addressDictionary?[CNPostalAddressCityKey] as? String,
state: placemark.addressDictionary?[CNPostalAddressStateKey] as? String,
zipCode: placemark.addressDictionary?[CNPostalAddressPostalCodeKey] as? String,
country: placemark.addressDictionary?[CNPostalAddressCountryKey] as? String,
countryCode: placemark.addressDictionary?[CNPostalAddressISOCountryCodeKey] as? String)
}
}
に変更されました。 AddressDictionary
のキャストは冗長です。直接使用することはできますが、警告メッセージが表示されます&警告が嫌いです。 ;)
ありがとうTiM。あなたのアプローチは素晴らしいです&ええ、それはいくつかの微調整が必要です。だから私は働くコードで答えを加えました。 –
この回答を確認しましたが、すべての回答が本当に役に立ちました:-) ありがとうございました! – chizcake