gpt4 book ai didi

c - swift3.0 无法将类型 '[UnsafeMutablePointer]' 的值转换为预期的参数类型 'UnsafeMutablePointer?'

转载 作者:行者123 更新时间:2023-11-30 14:57:04 26 4
gpt4 key购买 nike

这段代码在 Swift2.3 中运行良好,现在我将其转换为 Swift3。所以我收到这个错误。有人知道如何解决这个问题吗?

var cmdLnConf: OpaquePointer?
fileprivate var cArgs: [UnsafeMutablePointer<Int8>]

public init?(args: (String,String)...) {

// Create [UnsafeMutablePointer<Int8>].
cArgs = args.flatMap { (name, value) -> [UnsafeMutablePointer<Int8>] in
//strdup move the strings to the heap and return a UnsageMutablePointer<Int8>
return [strdup(name),strdup(value)]
}

cmdLnConf = cmd_ln_parse_r(nil, ps_args(), CInt(cArgs.count), &cArgs, STrue)

if cmdLnConf == nil {
return nil
}
}

enter image description here

最佳答案

根据我们的讨论,C 函数中的参数似乎应该是 char *p[]

我做了一个小测试

//
// f.h
// test001
//

#ifndef f_h
#define f_h

#include <stdio.h>

void f(char *p[], int len);

#endif /* f_h */

我定义了具有一些基本功能的函数

//
// f.c
// test001

#include "f.h"

void f(char *p[], int len) {
for(int i = 0; i<len; i++) {
printf("%s\n", p[i]);
};

};

具有所需的桥接 header

//
// Use this file to import your target's public headers that you would like to expose to Swift.
//

#include "f.h"

和 swift“命令行”应用程序

//
// main.swift
// test001
//

import Darwin

var s0 = strdup("alfa")
var s1 = strdup("beta")
var s2 = strdup("gama")
var s3 = strdup("delta")


var arr = [s0,s1,s2,s3]
let ac = Int32(arr.count)


arr.withUnsafeMutableBytes { (p) -> () in
let pp = p.baseAddress?.assumingMemoryBound(to: UnsafeMutablePointer<Int8>?.self)
f(pp, ac)
}

终于打印出来了

alfa
beta
gama
delta
Program ended with exit code: 0

根据结果,您必须使用

let count = CInt(cArgs.count)
cArgs.withUnsafeMutableBytes { (p) -> () in
let pp = p.baseAddress?.assumingMemoryBound(to: UnsafeMutablePointer<Int8>?.self)
cmdLnConf = cmd_ln_parse_r(nil, ps_args(), count, pp, STrue)
}

警告!!!不要在定义指针的闭包内调用 cArgs.count!

关于c - swift3.0 无法将类型 '[UnsafeMutablePointer<Int8>]' 的值转换为预期的参数类型 'UnsafeMutablePointer<Int8>?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44172125/

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