ios - 字典中对成员 'subscript' 的引用不明确

标签 ios swift swift2

我正在尝试为一个类创建一个可失败的初始化器。我的类将使用来自网络请求的输入进行初始化。网络不可靠,我想创建一个初始化程序来检查所有属性是否存在,否则会失败。

我在这里尝试使用守卫,所以请随时指出方法中的任何明显错误:

public class JobModel {
    let jobId: String
    let status: String
    let toName: String
    let toAddress: String
    let description: String
    let fee: Int
    let jobDate: NSDate
    let fromName: String
    let fromAddress: String

    init?(job: [String:AnyObject]) throws {
        guard self.jobId = job["jobid"] as! String else {
            throw InitializationError.MissingJobId
        }

    }
}

guard self.jobId 行编译失败,错误: 对成员“下标”的引用不明确

关于如何更正此错误的任何想法?

最佳答案

guard 需要一个符合 BooleanType 的条件。简单的分配没有。你会需要这样的东西。

guard let j = job["jobid"] as? String else {
    throw InitializationError.MissingJobId
}
self.jobId = j

但是,您将收到错误消息“类实例的所有存储属性必须在从初始化程序中抛出之前进行初始化。”这在 The Swift Programming Language 中是预期的和记录的:

For classes, however, a failable initializer can trigger an initialization failure only after all stored properties introduced by that class have been set to an initial value and any initializer delegation has taken place.

Chris Lattner 在这里提到当前行为是不可取的:http://swift-language.2336117.n4.nabble.com/Swift-2-throwing-in-initializers-td439.html

关于ios - 字典中对成员 'subscript' 的引用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689933/

相关文章:

ios - 旧金山字体 + SpriteKit

ios - handleOpenURL 不会触发 iOS Swift 2

ios - 无法提交 iOS 9 应用程序(无效的 Swift 支持)

ios - 暂停 SpriteKit 游戏 - UIApplicationWillResignActive 与 UIApplicationDidBecomeActive?

ios - 我更新的 IOS 应用程序需要多长时间才能出现在 App Store/iTunes 中?

objective-c - 为什么我在 objective-c 中得到一个整数到指针的转换错误?

ios - Swift 和 Parse 已更新,无法设置查询的缓存策略

swift - 在 Swift 中,遵守协议(protocol)的对象是否绝对需要委托(delegate)变量才能使用协议(protocol)?

Swift OS X 游戏中心

ios - UIScrollView 不一直向上/向下滚动