Diese Antwort die gezwickt Version von Tims Antwort. Die folgenden Eigenschaften unterliegen einer Änderung:
RLMObject
kann keine MKPlacemark
Eigenschaftstyp haben. So kann mkPlacemark set
nicht haben. Es kann get
& es fungiert als Instanzvariable, ohne eine gespeicherte Eigenschaft zu sein. Für iOS 9+ aktualisiert; Verwenden Sie das neue Kontakte-Framework. super.init()
haben geändert 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)
}
}
Es wäre toll, wenn jemand dies hilft. Das Casting von AddressDictionary
ist redundant. Sie können es direkt verwenden, aber es wirft eine Warnmeldung & Ich hasse Warnung. ;)
Vielen Dank TiM. Deine Herangehensweise ist großartig und ja, es braucht ein paar Feinabstimmungen. Also habe ich eine Antwort mit Arbeitscode hinzugefügt. –
Ich habe diese Antwort überprüft, aber alle Antworten waren sehr hilfreich für mich :-) Danke allen! – chizcake