chenzhao

  • java
  • iOS
  • IT
知识积累
不积跬步无以至千里
  1. 首页
  2. iOS
  3. 正文

各种类型转换日记

2016年 9月 29日 107点热度 0人点赞 0条评论

写这篇日记是为了记录下我遇见的一些需要类型转换的地方 的类型转换

swift 3 中学习别人代码的时候遇到的一个c 的删除函数

unlink () //参数char * 
函数类似功能swift 函数
try?  FileManager.default.removeItem(atPath: pathToMovie)


//oc 
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
unlink([path UTF8String]);

// swift 
unlink(UnsafePointer<Int8>!)
String 没看到转成这种类型的, 无奈 还是先转了NSString
unlink((path as NSString).utf8String!)

//swift3 
let string = fileURL.path.cString(using: String.Encoding.utf8)
        unlink(string)

在Swift 3中,String有两个初始化器

public init(cString: UnsafePointer<CChar>)
public init(cString: UnsafePointer<UInt8>)
因此它可以从有符号和无符号字符的(空终止)序列创建。所以

let s = String(cString: yourCharPointer)
应该只是工作。

String 有另一个初始化

public init?(validatingUTF8 cString: UnsafePointer<CChar>)
其在形式不良的UTF-8序列上失败,而不是由替换字符替换它们。这个init方法没有对应的无符号字符。

以现有的实现在CString.swift为例,它不是太难添加此作为扩展:

extension String {
    public init?(validatingUTF8 cString: UnsafePointer<UInt8>) {
        guard let (s, _) = String.decodeCString(cString, as: UTF8.self,
                                                repairingInvalidCodeUnits: false) else {
            return nil
        }
        self = s
    }
}
接着

if let s = String(validatingUTF8: yourCharPointer) {
    print(s)
} else {
    print("invalid UTF-8")
}
也与带符号和无符号字符的(空终止)序列一起工作。


一个 小数点保留问题, 最后转成string, 小数点问题

        let sizeGB = 1.2234
        let str =  String(format: "%0.0f", sizeGB)
        print(str)
        // 0.0 是0位小数 0.1 是一位 依次类推 也可以.0   .1

swift string 转 float 等 现在只发现这个最简单 先转 NSString

var s1 = s as NSString
//有这一句之后,就可以用下方的方法转换为int、float、double
s1.integerValue
s1.doubleValue
s1.floatValue

标签: 暂无
最后更新:2022年 11月 11日

陈昭

IT 程序员

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2022 chenzhao. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang