Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift 5.1:如何将NULL作为参数传递?_Ios_Swift_Core Foundation_Swift5.1 - Fatal编程技术网

Ios Swift 5.1:如何将NULL作为参数传递?

Ios Swift 5.1:如何将NULL作为参数传递?,ios,swift,core-foundation,swift5.1,Ios,Swift,Core Foundation,Swift5.1,我正在尝试为CFNotificationCenter设置obeserver 各国: 名称 要遵守的通知的名称。如果为NULL,则对对象发布的任何通知调用回调。 如果中心是Darwin通知中心,则此值不得为NULL 据我所知,NULL在Swift中不存在。那么这个论点应该是什么呢 以下代码可以编译,但空字符串不是NULL: CFNotificationCenterAddObserver( CFNotificationCenterGetDistributedCenter(), Uns

我正在尝试为
CFNotificationCenter
设置obeserver

各国:

名称 要遵守的通知的名称。如果为NULL,则对对象发布的任何通知调用回调。 如果中心是Darwin通知中心,则此值不得为NULL

据我所知,
NULL
在Swift中不存在。那么这个论点应该是什么呢

以下代码可以编译,但空字符串不是
NULL

CFNotificationCenterAddObserver(
    CFNotificationCenterGetDistributedCenter(),
    UnsafeMutableRawPointer?.none,
    receiveNotification,
    "" as CFString,
    UnsafeRawPointer?.none,
    CFNotificationSuspensionBehavior.deliverImmediately
)
我尝试了
CFString?
NSNull
NSNull作为字符串
,但编译器抱怨

我是否误解了文档?如何为name参数提供空值?

简短回答:来自(Objective-)C的可空指针是Swift中的可选指针,您可以为name传递
nil
(aka
optional.none
),以便调用对象发布的任何通知

一些背景:该函数的C声明是

CF_EXPORT void CFNotificationCenterAddObserver(CFNotificationCenterRef center,
               const void *observer,
               CFNotificationCallback callBack, 
               CFStringRef name,
               const void *object,
               CFNotificationSuspensionBehavior suspensionBehavior);
其中,
name
参数的类型是一个指针,声明为

typedef const struct CF_BRIDGED_TYPE(NSString) __CFString * CFStringRef;
(Objective-C)文档中明确指出,
name
可以是
NULL
,但显然函数声明尚未审核是否为NULL,这就是为什么将参数声明为隐式展开可选参数的原因

_ name: CFString!
迅速地

请参阅Swift博客中的,以了解有关可空性以及如何将(目标-)C指针导入Swift的更多信息

所以
name:CFString
只告诉我们Swift编译器不知道Objective-C参数是否可以为NULL,否则它的行为类似于常规可选的
CFString?
,您可以传递一个
nil
值,该值对应于(Objective-)C中的NULL指针
NULL


类似地,
const void*object
作为
\uobject:UnsafeRawPointer导入Swift因为没有可空性注释,您可以在此处传递
nil
(您已经以显式形式执行了
UnsafeRawPointer?.none
)。

关于
nil
?您可以尝试
nil
@user28434这是真的Null
,但存在
nil
。@Roberto,但它是相同的概念,不同的名称。