【问题标题】:Working with nil in Swift在 Swift 中使用 nil
【发布时间】:2016-08-22 17:03:07
【问题描述】:

如果我的服务器端在映射 JSON 后,期望 null 值作为默认值(用 Java 编写),是否可以在 Swift 中使用 nil 值,并将它们映射并按原样发送而不展开?

我将变量设置为 Optionals,因为它可能在某些时候有价值,也可能没有。但是我不得不打开它,即使我想发送一个 nil 值。

这是我的代码:

private var _username: String?

var username: String{
    get{

        return self._username

    }set(username){

        self._username = username
    }
}

如果我尝试使用可选链接,它会强制我在第 6 行执行此操作:

return (self._username?)!

但后来我得到了这种错误:“'?'必须后跟调用、成员查找或下标”

有什么方法可以在 Swift 中使用 nil,或者我必须更改后端的默认值?

【问题讨论】:

  • 您的私有变量是可选的;公共变量不是可选的有什么原因吗?
  • 公共变量和私有变量的目的是什么?这不是 Swift 风格
  • 删除 ?变量 _username 已经是可选的,只需使用 !强制打开它。

标签: swift null unwrap


【解决方案1】:

您不能“按原样”传递它们,因为您的服务器不知道 Swift 中的 nil 是什么。但是,您可以将表示 nil 的字符串或 JSON null 值传递给您。

现在是使用nil coalescing operator 的好时机。

private var _username: String?

var username: String{
    get{

        // This will return the username if it is .Some or "null" if it is .None
        return self._username ?? "null"
        // Note that when you create the JSON object there is a difference between
        // "null" which is a string and null which is the JSON equivalent to nil.

    } set(username) {

        self._username = username
    }
}

【讨论】:

    【解决方案2】:

    只需这样做:

    var username: String?
    

    作为:

    private var _username: String?
    
    var username: String? {
        get{
            return self._username
        }set(username){
            self._username = username
        }
    }
    

    【讨论】:

    • 如果您将所有工作都委托给私有变量,为什么还要费心计算变量?
    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2022-01-11
    • 2017-10-15
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多