Ios 为什么一个值突然变为零?
我正在做一个项目,我想得到一个特定标识符的图像。我有以下功能:Ios 为什么一个值突然变为零?,ios,swift,image,Ios,Swift,Image,我正在做一个项目,我想得到一个特定标识符的图像。我有以下功能: func imageForIdentifier(identifier: String?) -> UIImage? { if identifier == nil || identifier! == "" { return nil } let directory = directoryForID(identifier!) if let img
func imageForIdentifier(identifier: String?) -> UIImage? {
if identifier == nil || identifier! == "" {
return nil
}
let directory = directoryForID(identifier!)
if let img = imgInCache.objectForKey(identifier!) as? UIImage {
return img
}
if let img = NSData(contentsOfFile: directory) {
return UIImage(data: img)
}
return nil
}
…以及directoryForID
函数
func directoryForID(identifier: String) -> String {
let directoryPath: NSURL = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentationDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).first!
return (directoryPath.URLByAppendingPathComponent(identifier).path!)
}
如果我传递一个图像标识符,它应该创建一个目录,并且在最后一个If语句中,它应该返回该目录中数据的UIImage
。但是,它跳过所有if语句并返回nil。即使我传递了正确的标识符,这怎么可能呢
提前感谢您。原因是您如何测试字符串对象标识符的零能力或空性: identifier.length有助于验证标识符的内容…编辑的答案
func imageForIdentifier(identifier: String?) -> UIImage? {
guard let identifier else { return }
let directory = directoryForID(identifier)
if let img = imgInCache.objectForKey(identifier) as? UIImage {
return img
}
if let img = NSData(contentsOfFile: directory) {
return UIImage(data: img)
}
return nil
}
将路径组件附加到
URLsForDirectory
的结果不会自动创建目录。你必须写代码。您的方法是使用guard
而不是的一个很好的例子,如果一个guard语句就可以了,但是如果例程不尝试将一个可选的作为参数,它会更好。一般来说,您不应该将选项作为参数传递。相反,调用方应该在自己的上下文中决定如何解决可选问题。如果您说它应该“创建一个目录”,我想您的意思是它应该创建一个表示目录的URL?代码中的任何内容实际上都不会导致创建目录。甚至比identifier.length
更好,您可以使用identifier.isEmpty