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)