Xcode 在非可选的字符串上返回 nil
Posted
技术标签:
【中文标题】Xcode 在非可选的字符串上返回 nil【英文标题】:Xcode returns nil on string that isn't optional 【发布时间】:2020-05-27 23:45:48 【问题描述】:我有一个接收图像和字符串的函数。当我尝试使用 () 功能将字符串放入更长的字符串时,它告诉我它在展开可选时找到了 nil。例外,它根本不是可选的,它是一个字符串。我可以将值打印出来,并且正确输出。
func UpdateBusiness(logo: UIImage, category: String)
guard let bizID = UserDefaults.standard.string(forKey: defaultKeys.businessID) else return
let thisURL = "http://mywebsite.com/api/v0.1/Business/EditBusinessLogoAndCategory?businessID=\(bizID)&category=\(category)"
let combinedURL = URL(string: thisURL)!
创建 URL 会使系统崩溃。我可以在调试器中看到 category 的值,而且我在这个字符串中没有任何选项。怎么找零?
【问题讨论】:
你检查过调试器中的bizID
是什么吗?
是的。它也正确进入。当我不在那里添加类别时,thisURL 可以正常工作。
它是否在let
行或其他行上崩溃?我确信代码比您显示的要多,因为显示的代码对thisURL
没有任何作用。我的猜测是您正在尝试从 thisURL
创建一个 URL
并且 that 返回 nil
。
@Paulw11 它在那条线上崩溃了,特别是。如果我把它放在一个保护语句中,它会立即返回。
我们无法告诉您为什么 url 无效,因为我们不知道 bizID
和 category
的实际值,但是强制解开 @987654330 的返回值是不安全的@ 因为如果 URL 格式不正确,它可能会失败
【参考方案1】:
此代码由于强制展开而崩溃。在这种情况下可以推荐使用URLComponents。这比字符串连接更具可读性,对于大量参数字符串连接不是一个好的选择。
var components = URLComponents()
components.scheme = "http"
components.host = "mywebsite.com"
components.path = "/api/v0.1/Business/EditBusinessLogoAndCategory"
components.queryItems = [
URLQueryItem(name: "businessID", value: bizID),
URLQueryItem(name: "category", value: category)
]
let url = components.url
enter code here
【讨论】:
以上是关于Xcode 在非可选的字符串上返回 nil的主要内容,如果未能解决你的问题,请参考以下文章
Xcode NSManagedObject 子类在它们被标记为非可选时包含可选