投射NSString!快速的字符串

投射NSString!快速的字符串,第1张

概述我在String中有一个实例变量名 var name: String 我的类实现了NSCoding协议.所以我的名字 func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(self.name, forKey: kName)}required init(coder aDecoder: NSCoder) { sel 我在String中有一个实例变量名
var name: String

我的类实现了NSCoding协议.所以我的名字

func encodeWithCoder(aCoder: NSCoder) {    aCoder.encodeObject(self.name,forKey: kname)}required init(coder aDecoder: NSCoder) {    self.name = aDecoder.decodeObjectForKey(kname) as String  // CRASH HERE}

结果?我在解码器启动时遇到运行时崩溃.我将init更改为:

var temp = aDecoder.decodeObjectForKey(kname) as Nsstring!self.name = aDecoder.decodeObjectForKey(kname) as String

并且意识到temp的值持有正确的Nsstring值.所以我以为下面的行将修复它,但它发出链接器错误:

self.name = aDecoder.decodeObjectForKey(kname) as Nsstring!

问题是如何把温度放在一起呢?

decodeObjectForKey返回一个可选的AnyObject?,所以你必须保护你的代码免受可能的nil值.使用强制展开的演员听起来不安全.

我无法重现错误(所以问题可能在你的代码中的其他地方),但是这是我初始化name属性时的方法:

var tempname = aDecoder.decodeObjectForKey("name") as? String    if let tempname = tempname {        self.name = tempname    } else {        self.name = "some initial value"    }

注意可选的downcasting的用法,它总是产生一个结果(nil或一个有效的类型值),而不是Nsstring!,如果下拉列表不可能触发异常(例如,如果你期望一个字符串,但它是一个int代替).

该代码还将允许您更好地调试 – 如果tempname为nil,则该键不存在或相应的值为不同类型.

总结

以上是内存溢出为你收集整理的投射NSString!快速的字符串全部内容,希望文章能够帮你解决投射NSString!快速的字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1027278.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存