json.swift 错误是 Self.init 在委托初始化程序中的所有路径上都没有调用

Posted

技术标签:

【中文标题】json.swift 错误是 Self.init 在委托初始化程序中的所有路径上都没有调用【英文标题】:json.swift error is Self.init isn't called on all paths in delegating initializer 【发布时间】:2015-10-20 11:06:49 【问题描述】:

enter image description here

json.swift中出现照片等错误

我不知道如何解决它。 请帮帮我

    public convenience init(nsurl:NSURL) 
    var enc:NSStringEncoding = NSUTF8StringEncoding
    let err:NSError?

    do 
        let str: String? = try NSString(contentsOfURL: nsurl, encoding: NSUTF8StringEncoding) as String
        //print(str)

        self.init(nsurl:nsurl)

     catch let error as NSError 
        //print(error.description)

    

【问题讨论】:

粘贴你的代码而不是图片 您必须使构造函数可抛出,删除 do-catch 子句或在 catch 块中调用 super.init(nsurl:) 谢谢你!我尝试将 super.init(nsurl:nsurl) 写入 catch 子句。但出现此错误 ['super' members cannot be referenced in a root class] 和 [Convenience initializer for 'JSON' must delegate (with 'self.init') 而不是链接到超类初始化器 (with 'super.init' )] 【参考方案1】:

这里有几个选项取决于您的意图。

如果您只是不想在初始化期间将您的对象打包并打印添加信息,您可以像这样重写您的代码。

public convenience init(nsurl:NSURL)        
 var enc:NSStringEncoding = NSUTF8StringEncoding
 let err:NSError?

 self.init(nsurl:nsurl)
 do 
       let str: String? = try NSString(contentsOfURL: nsurl, encoding: NSUTF8StringEncoding) as String
       print(str)

     catch let error as NSError 
       print(error.description)
    

另一种选择是使用failable 初始化程序。为此,如果没有异常执行块,则需要调用 self.init(nsurl:nsurl),否则从 catch 块返回 nil。此外,您需要将方便的 init 方法标记为可失败(请参阅 init 字后的“?”)

public convenience init?(nsurl:NSURL)        
 var enc:NSStringEncoding = NSUTF8StringEncoding
 let err:NSError?

    do 
       self.init(nsurl:nsurl)
       let str: String? = try NSString(contentsOfURL: nsurl, encoding: NSUTF8StringEncoding) as String
       print(str)

     catch let error as NSError 
       print(error.description)
       return nil
    

【讨论】:

以上是关于json.swift 错误是 Self.init 在委托初始化程序中的所有路径上都没有调用的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 和 Codable 类编译器错误:在从初始化程序返回之前,未在所有路径上调用“self.init”

Swift: self.init (coder : aDecoder) 正在使用 EXC_BAD_ACCESS 使应用程序崩溃

使用未解析的标识符 'json' (Swift 3) (Alamofire)

解析 JSON Swift 4

通过使用 Alamofire 和解码获取 JSON - Swift 4

self.init() 导致便利 init() 无限运行