标签: unsafemutablepointer

在Swift中使用C函数,将函数作为参数

我正在写一个C数学库的包装器.每个函数都将一个或两个函数作为参数.但是,这些子函数(以及父函数)的参数不是Swifty -hence包装器.

我已经清理了示例代码,只显示了三个主要部分:c-library函数,将传递给包装器的所需Swift函数(未显示的主体,但包围c-library函数),以及所需的C函数形式.

//C library function, that calls the passed function dozens, hundreds or thousands of times, each time it changes the data provided in p, and uses the output from x
//The Swift arrays are passed as pointers, and the length of the and x array are m and n respectively
returnValue = cLibraryFunc(passedFunc, &p, &x, Int32(m), Int32(n), Int32(itmax), &opts, &info, &work, &covar, &adata)


//I would like to create a Swift function that would look like this (internals could …
Run Code Online (Sandbox Code Playgroud)

c wrapper swift unsafemutablepointer

3
推荐指数
1
解决办法
2493
查看次数

如何获取Swift对象的AutoreleasingUnsafeMutablePointer

我目前是我的Swift应用程序上载任务的owncloud iOS库。它是用Objective-C编写的,要求我将传递AutoreleasingUnsafeMutablePointer<NSProgress?>给上载方法

说我像这样创建一个新对象

let progress: NSProgress? = NSProgress()
Run Code Online (Sandbox Code Playgroud)

如何AutoreleasingUnsafeMutablePointer<NSProgress?>在Swift中获取此对象的?

我通过以下方式尝试了它:

var progress: NSProgress? = NSProgress()
let unsafeAutoreleasingProgressPointer = AutoreleasingUnsafeMutablePointer<NSProgress?>.init(&progress)
Run Code Online (Sandbox Code Playgroud)

但是我得到了

EXC_BAD_ACCESS(代码= 1,地址= 0x15942320)

在执行代码时。我想保留对进度对象的引用,因为我想添加一个观察者回调,该回调以百分比的形式告诉我上传进度(也在示例链接中进行了演示)。

ios owncloud swift swift2 unsafemutablepointer

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

AURenderCallback中的UnsafeMutablePointer

我不明白该如何UnsafeMutablePointer在Swift 3中使用AURenderCallback

我尝试下面的代码:

import Foundation
import AudioToolbox

let sineFrequency = 880.0

// MARK: User data struct
struct SineWavePlayer {
    var outputUnit: AudioUnit? = nil
    var startingFrameCount: Double = 0
}

// MARK: Callback function
let SineWaveRenderProc: AURenderCallback = {(inRefCon, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData) -> OSStatus in

    var player = UnsafeMutablePointer<SineWavePlayer>(inRefCon)


    var j = player.pointee.startingFrameCount
    let cycleLength = 44100 / sineFrequency

    for frame in 0..<inNumberFrames {
        var buffers = UnsafeMutableAudioBufferListPointer(ioData)

        UnsafeMutablePointer<Float32>(buffers[0].mData)[Int(frame)] = Float32(sin(2 * M_PI * …
Run Code Online (Sandbox Code Playgroud)

core-audio swift3 unsafemutablepointer

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

UnsafeMutablePointer到Array元素

var a = [1,2,3]
let ptr1 = UnsafeMutablePointer<Int>(&a[0]) //works fine

let index = 0
let ptr2 = UnsafeMutablePointer<Int>(&a[index]) //compiler throws error
Run Code Online (Sandbox Code Playgroud)

error:无法为类型UnsafeMutablePointer<Int>为参数列表的类型调用初始值设定项(inout Int)

为什么后者不编译?这里有什么我想念的吗?


我想做一个下面的片段.

class Holder {
    var numbers: [Int] = [1,2,3,4]
    var modifier: Modifier

    init(index: Int) {
       self.modifier = Modifier(UnsafeMutablePointer(&self.numbers) + index)
    }

}

class Modifer {
  var ptr: UnsafeMutablePointer<Int>

  init(_ ptr: UnsafeMutablePointer<Int>) {
     self.ptr = ptr
  }

  func change(to: Int) {
     self.ptr.pointee = to
    // expected the change to be reflected in numbers array …
Run Code Online (Sandbox Code Playgroud)

macos ios swift unsafemutablepointer

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

'UnsafeMutableRawPointer' 类型的值没有下标 Swift 5

我正在尝试将目标 c 代码转换为 swift。

UInt8* data = calloc(bytesPerRow, height);
Run Code Online (Sandbox Code Playgroud)

当我快速转换它时,它返回“UnsafeMutableRawPointer”。我需要 UInt8。

let data = calloc(bytesPerRow, height)! // UnsafeMutableRawPointer
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的解决方案,但对我不起作用。谁能告诉我如何解决这个问题。谢谢

“UnsafeMutableRawPointer”类型的值没有下标

在此处输入图片说明

SWIFT代码。

 // data pointer – stores an array of the pixel components. For example (r0, b0, g0, a0, r1, g1, b1, a1 .... rn, gn, bn, an)
        //*calloc(size_t __count, size_t __size) __result_use_check __alloc_size(1,2);
        let data = calloc(bytesPerRow, height)!

        // get new RGB color space
        let colorSpace = CGColorSpaceCreateDeviceRGB()

        // create bitmap context
        let ctx = CGContext(data: data, width: width, height: …
Run Code Online (Sandbox Code Playgroud)

objective-c ios uint8t swift unsafemutablepointer

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

如何从Character数组中获取UnsafeMutableBufferPointer <Character>

我试图使用以下代码获取UnsafeMutableBufferPointer,它有时在Playground中工作,它也失败了

let array : [Character] = ....
func getUnsafeMP(array: [Character]) -> UnsafeMutableBufferPointer<Character> {

    let count = array.count
    let memory = UnsafeMutablePointer<Character>(allocatingCapacity: count)

    for (index , value) in array.enumerated() {

        memory[index] = value //it fails here EXC_BAD_ACCESS
    }

    let buffer = UnsafeMutableBufferPointer(start: memory, count: count)

    return buffer
}
Run Code Online (Sandbox Code Playgroud)

swift swift3 unsafemutablepointer

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

如何使用"getControlPoint(在idx:Int,值ptr:UnsafeMutablePointer <Float>!)"CAMediaTimingFunction

我在OC中使用此功能

CAMediaTimingFunction *function = [CAMediaTimingFunction functionWithName:
                                   kCAMediaTimingFunctionDefault];
//get control points
CGPoint controlPoint1, controlPoint2;
[function getControlPointAtIndex:1 values:(float *)&controlPoint1];
[function getControlPointAtIndex:2 values:(float *)&controlPoint2];

NSLog(@"%@, %@", NSStringFromCGPoint(controlPoint1), NSStringFromCGPoint(controlPoint2));
//{5.2386907149499368e-11, 7.9050503334599447e-323}, {0.0078125018189894035, 4.9406564584124654e-324}
Run Code Online (Sandbox Code Playgroud)

但如何将其转换为swift3.1,我这样做,但有些不对劲!

let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)

var point1 = Float(0.0), point2 = Float(0.0)

timingFunction.getControlPoint(at: 1, values: &point1)
timingFunction.getControlPoint(at: 2, values: &point2)
print("\(String(describing: point1)),\(String(describing: point2))")
// 0.25,0.25
Run Code Online (Sandbox Code Playgroud)

怎么解决?我需要一些帮助.注意代码打印.

core-animation ios swift unsafemutablepointer

0
推荐指数
1
解决办法
254
查看次数