Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 文件路径Swift3中的可选项_Ios_Swift3 - Fatal编程技术网

Ios 文件路径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

在swift3中,我无法访问下载并解压缩的本地文件

路径包含“可选”:

我创建此路径的代码是:

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