相关疑难解决方法(0)

如何在Swift中将self转换为UnsafeMutablePointer <Void>类型

在调用以下代码时,尝试将"self"传递给swift中的C函数:

var callbackStruct : AURenderCallbackStruct = 
    AURenderCallbackStruct.init(
      inputProc: recordingCallback,
      inputProcRefCon: UnsafeMutablePointer<Void>
    )
Run Code Online (Sandbox Code Playgroud)

在这里将"self"转换为UnsafeMutablePointer类型的理想方法是什么?

pointers casting unsafe-pointers swift

44
推荐指数
1
解决办法
2万
查看次数

如何使用实例方法作为只接受func或文字闭包的函数的回调

在"ViewController.swift"中我创建了这个回调:

func callback(cf:CFNotificationCenter!, 
    ump:UnsafeMutablePointer<Void>, 
    cfs:CFString!, 
    up:UnsafePointer<Void>, 
    cfd:CFDictionary!) -> Void {

}
Run Code Online (Sandbox Code Playgroud)

使用此观察者:

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), 
    nil, 
    self.callback, 
    "myMESSage", 
    nil, 
    CFNotificationSuspensionBehavior.DeliverImmediately)
Run Code Online (Sandbox Code Playgroud)

导致此编译器错误:

"AC函数指针只能通过对'func'或文字闭包的引用形成"

callback swift

26
推荐指数
1
解决办法
1万
查看次数

关闭捕获上下文Swift

当我尝试更改闭包中的变量时,我收到此错误:

A C function pointer cannot be formed from a closure that captures context
Run Code Online (Sandbox Code Playgroud)

是否有解决方法或是否仍然可以更改闭包内的变量?

我的代码:

let callback: @convention(c) (readStream: CFWriteStream!, event: CFStreamEventType, data: UnsafeMutablePointer<Void>) -> Void = {
    (readStream, event, data) -> Void in
    switch event {
    case CFStreamEventType.ErrorOccurred:
        self.isError = true
        break
    case CFStreamEventType.EndEncountered:
        self.isRunLoop = false
        break
    case CFStreamEventType.HasBytesAvailable:
        break
    case CFStreamEventType.OpenCompleted:
        break
    case CFStreamEventType.CanAcceptBytes:
        self.bytesWritten = CFWriteStreamWrite(readStream, self.buffer, self.leftOverSize)
        break
    default:
        break
    }
}

let registeredEvents: CFOptionFlags =
    CFStreamEventType.CanAcceptBytes.rawValue |
    CFStreamEventType.HasBytesAvailable.rawValue |
    CFStreamEventType.ErrorOccurred.rawValue |
    CFStreamEventType.EndEncountered.rawValue | …
Run Code Online (Sandbox Code Playgroud)

closures callback swift

4
推荐指数
1
解决办法
1664
查看次数

标签 统计

swift ×3

callback ×2

casting ×1

closures ×1

pointers ×1

unsafe-pointers ×1