首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@应用存储和MKCoordinateRegion函数

@应用存储和MKCoordinateRegion函数
EN

Stack Overflow用户
提问于 2021-04-22 21:20:24
回答 1查看 27关注 0票数 3

是否可以在@App Storage中保存MKCoordinateRegion值?我试过了。但它不起作用。我收到错误消息“调用初始化程序时没有精确匹配”。

代码语言:javascript
复制
    @AppStorage("region_key") var region = MKCoordinateRegion(
        center: CLLocationCoordinate2D(latitude: 34.011_286, longitude: -116.166_868),
        span: MKCoordinateSpan(latitudeDelta: 100, longitudeDelta: 100)
    )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-22 22:55:55

存储在AppStorage中的类型必须符合RawRepresentableMKCoordinateRegion不做这项开箱即用的工作,但您可以添加一个扩展来添加一致性:

代码语言:javascript
复制
extension MKCoordinateRegion : RawRepresentable {
    struct RepresentableForm : Codable {
        var centerLat : Double
        var centerLong : Double
        var latDelta: Double
        var longDelta : Double
    }
    
    public init?(rawValue: String) {
        guard let data = rawValue.data(using: .utf8), let result = try? JSONDecoder().decode(RepresentableForm.self, from: data)
        else {
            return nil
        }
        self = MKCoordinateRegion(
            center: CLLocationCoordinate2D(latitude: result.centerLat, longitude: result.centerLong),
            span: MKCoordinateSpan(latitudeDelta: result.latDelta, longitudeDelta: result.longDelta)
        )
    }
    
    public var rawValue: String {
        do {
            let data = try JSONEncoder().encode(RepresentableForm(centerLat: self.center.latitude, centerLong: self.center.longitude, latDelta: self.span.latitudeDelta, longDelta: self.span.longitudeDelta))
            return String(data: data, encoding: .utf8) ?? ""
        } catch {
            fatalError()
        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67214115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档