ios - 崩溃专用 String.imageSize(),
问题描述
我在以下扩展方法中崩溃了String
:
func imageSize() -> CGSize {
// self = "https://s3-eu-west-1.amazonaws.com/mimg.haraj.com.sa/userfiles30/2018-8-6/524x334-1_-E7VSb5T20mOouX.jpg"
var width = 0
var height = 0
let split0 = self.split(separator: "/")
if split0.count > 0 {
let split1 = split0.last?.split(separator: "-")
if (split1?.count)! > 0 {
let split2 = split1?.first?.decomposedStringWithCanonicalMapping.split(separator: "x")
width = (split2?.first?.decomposedStringWithCanonicalMapping.toInt())!
if (split2?.count)! > 1 {
// let split2 = split1![1].decomposedStringWithCanonicalMapping.split(separator: "-")
height = (split2?.last?.decomposedStringWithCanonicalMapping.toInt())!
}
}
}
return CGSize(width: width, height: height)
}
崩溃上线了return CGSize(width: width, height: height)
我创建了一个NSString
这样的版本来使用上述相同的方法:
@objc extension NSString {
func imageSize1() -> CGSize {
return (self as String).imageSize()
}
}
然后从 obj-c 代码中调用它:
CGSize imageSize = [url imageSize1];
网址示例如下:
该imageSize()
方法的作用是从 url 解析图像大小。上面的 url 包含大小 675x900 -> widthxheight。
在极少数情况下,我们会遇到没有大小信息且 url 不是上述格式的 url。因此,如果未找到大小,CGSize = (0 , 0)
则返回。
我已经在所有预期的情况下测试了这种方法。但由于某些原因,该方法导致崩溃。可能是我错过/弄乱了一些东西。
这是 Crashlytics问题的链接。
任何帮助,将不胜感激。
解决方案
崩溃很可能是由于强制展开选项造成的。在您的代码中有几种使用它的情况,如果您的 URL 中的文件名与您预期的格式不同,这将导致运行时错误。尝试
func imageSize() -> CGSize {
// self = "https://s3-eu-west-1.amazonaws.com/mimg.haraj.com.sa/userfiles30/2018-8-6/524x334-1_-E7VSb5T20mOouX.jpg"
var width = 0
var height = 0
let split0 = self.split(separator: "/")
if let split1 = split0.last?.split(separator: "-")
{
if let split2 = split1.first?.decomposedStringWithCanonicalMapping.split(separator: "x")
{
width = (split2.first?.decomposedStringWithCanonicalMapping.toInt()) ?? 0
if split2.count > 1 {
height = (split2.last?.decomposedStringWithCanonicalMapping.toInt()) ?? 0
}
}
}
return CGSize(width: width, height: height)
}
推荐阅读
- python - 每当我运行 model.predict_classes() 时,我的内核就死了
- reactjs - Firebase 存储:对象不存在
- installation - 如何使用 WIX 将第 3 方 exe 安装程序与其他文件夹/文件捆绑在一起
- reactjs - 静态导出后 Nextjs 按钮 onClick 不起作用
- python - 如果查询集值在列表中
- scala - chisel 编译错误:对象插件不是包 chisel3.internal 的成员
- r - 在 ggplot2 中将 abline 添加到 facet_zoom
- json - 使用 JOLT 转换将示例 JSON 转换为嵌套 JSON 数组
- python - 热编码可变长度向量列表
- ios - iOS 上的 Web Speech API(语音识别)