Ios 文件路径Swift3中的可选项
在swift3中,我无法访问下载并解压缩的本地文件 路径包含“可选”: 我创建此路径的代码是:Ios 文件路径Swift3中的可选项,ios,swift3,Ios,Swift3,在swift3中,我无法访问下载并解压缩的本地文件 路径包含“可选”: 我创建此路径的代码是: let videoPath = fileManager!.appendingPathComponent("\(MyObj.folder)/\(MyObj.fileName)") SpeedLog.print(videoPath.path) MyObj类是: class MyObj : NSObject, NSCoding { var fileName:String! var folder:Str
let videoPath = fileManager!.appendingPathComponent("\(MyObj.folder)/\(MyObj.fileName)")
SpeedLog.print(videoPath.path)
MyObj类是:
class MyObj : NSObject, NSCoding {
var fileName:String!
var folder:String!
required convenience init?(coder decoder: NSCoder) {
self.init()
self.fileName = decoder.decodeObject(forKey: "fileName") as! String
....
}
convenience init(id:Int,fileName:String,...) {
self.init()
self.fileName = fileName
....
}
func encode(with coder: NSCoder) {
if let fileName = fileName { coder.encode(fileName, forKey: "fileName") }
....
}
如何在没有“可选”的情况下构建路径?查看“可选”“在字符串输出中,表示您正在传入一个可选变量,该变量可能包含值或可能包含nil
。如果您确定要使用它时它不是nil
,可以通过添加强制展开它代码>到它的名称,这使它不再是可选的。如果对nil
的变量执行此操作,将得到运行时错误。或者,您可以使用let
展开
var optional:String? // optional, contains nil
print(optional) // 'nil'
optional = "something" // still optional, contains "something"
print(optional) // 'Optional("something")'
print(optional!) // 'something'
let nonOptional = optional! // not optional, contains "something"
print(nonOptional) // 'something'
在这本书中有很多关于期权的内容
在您提供的MyObj类定义中,看起来文件名
和文件夹
实例变量被设置为隐式展开的选项(定义它们时,它们的名称后面有一个!
),这过去工作正常,但现在给您带来了这个问题
在Swift 3中,苹果改变了隐式展开Optionals的工作方式,这就是问题的原因。中有一个完整的解释,但简短的版本是字符串插值不再将它们视为隐式展开
解决方法是使用手动打开它们代码>,或使用其他方法生成字符串。您可以使用+运算符连接字符串和字符串文字,我认为这看起来非常干净:
let path = obj.folder + "/" + obj.fileName
谢谢你的解释。事实上,MyObj是MyObj的一个实例,我只是在给出的示例中重命名了它。所以我改成了fileManager!。追加PathComponent(“(MyObj.folder!)/(MyObj.fileName!)”)就可以了,但我真的不明白为什么需要添加!和以前一样,它正在工作,而且已经有了!在课堂上definition@Ludo实际上,看起来你做的一切都是对的,但苹果改变了Swift在字符串插值中隐式处理未包装选项的方式。我在答案中添加了一个解释和另一种创建字符串的方法。
let path = obj.folder + "/" + obj.fileName