【问题标题】:NSURL fail able initialiser initWithString: does not return nil on empty String in SwiftNSURL 可以失败的初始化器 initWithString:在 Swift 中不会在空字符串上返回 nil
【发布时间】:2015-09-25 14:33:01
【问题描述】:

在 Playground 中很容易复制

import Foundation

let urlString = ""

let url = NSURL(string: urlString)

print(url)

url 的结果不知何故是(no URL) 而不是预期的nil 并且打印输出为Optional(),既不是.Some,也不是.None

我真的很想对此有所了解,因为它让我大吃一惊,并导致生产代码崩溃。

【问题讨论】:

    标签: swift nsurl


    【解决方案1】:

    在我为此填写了雷达后,我得到了以下答案:

    Apple 开发者关系

    空字符串是有效的 URL 字符串。它没有方案,没有权限(用户/密码/主机/端口),空路径,没有查询,没有分片。

    所以它似乎按预期工作。

    【讨论】:

    • 那么你的意思是 swift 3 中为空字符串返回 nil 的 URL 是值得关注的,对吧?
    • 哇,刚刚测试了一下,let url = URL(string: "")let nsurl = NSURL(string: "")结果不一样
    • 我知道,当我进行 swift 3 迁移时,我的应用程序在我身上崩溃了,我无法弄清楚为什么它在查看文档后它确实不应该在 swift 2 上运行,所以我现在检查了空字符串。
    【解决方案2】:

    最好的方法是阅读文档

    convenience init?(string URLString: String)
    

    返回值

    一个用 URLString 初始化的 NSURL 对象。如果 URL 字符串格式错误,则返回 nil。

    讨论

    此方法要求 URLString 仅包含格式正确的 URL 中允许的字符。所有其他字符必须正确地进行百分比转义。任何百分比转义的字符都使用 UTF-8 编码进行解释。

    所以你必须检查nil

    【讨论】:

    • 它不返回零!那是我的问题
    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2016-07-03
    • 2015-05-17
    • 1970-01-01
    相关资源
    最近更新 更多