相关疑难解决方法(0)

如何在Swift语言中将String转换为CString?

我正在尝试将dispatch_queue_create与我在运行时创建的动态String一起用作第一个参数.编译器抱怨,因为它需要一个标准的c字符串.如果我将其切换到编译时定义的字符串,则错误消失.谁能告诉我如何将String转换为标准c字符串?

swift

15
推荐指数
4
解决办法
2万
查看次数

字符串值为UnsafePointer <UInt8>函数参数行为

我发现以下代码编译和工作:

func foo(p:UnsafePointer<UInt8>) {
    var p = p
    for p; p.memory != 0; p++ {
        print(String(format:"%2X", p.memory))
    }
}

let str:String = "??"
foo(str)
Run Code Online (Sandbox Code Playgroud)

这打印E4BB8AE697A5,这是一个有效的UTF8表示??

据我所知,这是无证行为.来自文件:

当函数声明为采用UnsafePointer参数时,它可以接受以下任何一种:

  • nil,作为空指针传递
  • UnsafePointer,UnsafeMutablePointer或AutoreleasingUnsafeMutablePointer值,必要时转换为UnsafePointer
  • 一个输入输出表达式,其操作数是类型为Type的左值,它作为左值的地址传递
  • 一个[Type]值,作为指向数组开头的指针传递,并在调用期间延长生命周期

在这种情况下,str不属于他们.

我错过了什么吗?


添加:

如果参数类型是,则它不起作用 UnsafePointer<UInt16>

func foo(p:UnsafePointer<UInt16>) {
    var p = p
    for p; p.memory != 0; p++ {
        print(String(format:"%4X", p.memory))
    }
}
let str:String = "??"
foo(str)
//  ^ 'String' is not convertible to 'UnsafePointer<UInt16>'
Run Code Online (Sandbox Code Playgroud)

即使内部String表示是UTF16

let str = "??" …
Run Code Online (Sandbox Code Playgroud)

swift

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

访问Swift中的临时目录

我试图访问Swift中的临时目录.在Objective-C中,我可以使用以下代码来执行此操作:

- (NSString *)tempDirectory {

    NSString *tempDirectoryTemplate =
    [NSTemporaryDirectory() stringByAppendingPathComponent:@"XXXXX"];
    const char *tempDirectoryTemplateCString = [tempDirectoryTemplate fileSystemRepresentation];
    char *tempDirectoryNameCString           = (char *)malloc(strlen(tempDirectoryTemplateCString) + 1);
    strcpy(tempDirectoryNameCString, tempDirectoryTemplateCString);
    char *result                             = mkdtemp(tempDirectoryNameCString);
    if (!result) {
        return nil;
    }
    NSString *tempDirectoryPath = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:tempDirectoryNameCString length:strlen(result)];
    free(tempDirectoryNameCString);
    return tempDirectoryPath;
}
Run Code Online (Sandbox Code Playgroud)

但是,我对从Objective-C到Swift的类型转换和转换有点困惑,例如 const char *CMutablePointer<CChar>.有没有我应该研究的文件?

谢谢.

macos cocoa objective-c swift

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

标签 统计

swift ×3

cocoa ×1

macos ×1

objective-c ×1