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
(akaoptional.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,但它是相同的概念,不同的名称。