gpt4 book ai didi

objective-c - nil 如何在 Objective-C 和 Swift 中调用函数

转载 作者:搜寻专家 更新时间:2023-10-31 22:28:23 25 4
gpt4 key购买 nike

nil 在 Objective-C 和 Swift 中是相似但不同的概念。

在 Objective-C 中

nil 表示缺少 Objective-C 对象。详细地说,id 是任何对象的指针。nilid,表示什么都没有。

所以,任何原始类型都不能是nils

例如。

NSString *a = nil (o)
int a = nil (x)

在 Swift 中

nil 表示缺少任何称为 Optional 的数据类型。所以 nil 是 Optional 的类型别名吗?

两种语言,任何nil类型的对象都可以调用一个函数。

例如。

NSString *name = nil;
[a lowercaseString];

let name: String? = nil
name.lowercased()

这两种情况都不会发生空点异常。

presents nothing 和 absense 怎么能调用函数呢?

最佳答案

nil is kind of typealias of Optional?

没有。 nilOptional<T>.none 的语法糖其中 T是被可选包裹的类型。

name: String? = nil 
name.lowercased()

不,这是非法的。如果您在 playground 中尝试,自动完成将插入一个问号

name?.lowercased()
// ^ here

这基本上意味着如果 name 不是 nil,打开它并调用 lowercased()否则返回 nil。

Objective-C 中的 nil 和 Swift 中的 nil 在“底层”是根本不同的。 nil 在 Objective-C 中只是一个空指针。这就是为什么 Objective-C 中的原语不能为 nil:它们不是指针类型。

如果您尝试在 Objective-C 中向 nil 发送消息,它会起作用,因为消息发送函数会检查接收方,如果它是 nil,它只会返回 0,调用者将根据返回值对其进行解释输入它期望的类型,例如如果它期望一个 int,它将得到 0,如果它期望一个 Bool,它将得到 false,如果它期望一个 id,它将得到 nil。

nil 在 Swift 中,如上所述,nil 是 Optional 枚举的一个值的语法糖。

enum Optional<T>
{
case some(T)
case none
}

Optional 本身就是一种类型,你不能在其上调用包装类型的方法,这就是为什么你必须先用 ?后修复运算符。

关于objective-c - nil 如何在 Objective-C 和 Swift 中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43389377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com