我正在将一个项目迁移到Swift 4,我不知道如何在Swift 4中使用新的API:s来完成这个任务。
let formattedString = "A string"
guard let stringData: Data = formattedString.data(using: .utf8) else { return }
let data: DispatchData = [UInt8](stringData).withUnsafeBufferPointer { (bufferPointer) in
return DispatchData(bytes: buffer
我试图为Data类提供一个帮助方法,将字节转换为UInt32。到目前为止,这是可行的:
extension Data {
var uint32:UInt32 {
return UInt32(littleEndian: self.withUnsafeBytes { (ptr: UnsafePointer<UInt32>) in ptr.pointee })
}
}
由于swift 5,编译器会发出以下警告:
'withUnsafeBytes' is deprecated: use `withUnsafeBytes<R>
的解决方案不再适用于Swift 3。
不再存在属性bytes of Data (以前为NSData )。
let data = dataToWrite.first!
self.outputStream.write(&data, maxLength: data.count)
通过这段代码,我得到了错误:
Cannot convert value of type 'Data' to expected argument type 'UInt8'
如何在Swift 3中将Data写入NSOutputStream?
我的Swift 3代码有一个基础字节集合(从SQlite BLOB读取)。数据的内部内容有多个块,结构如下:
{
UINT32 count; // number of points in this trkseg
UINT32 colour; // RGB colour of the line drawn for this trkseq
Double lat; // latitude of 1st point
Double long; // longitude of 1st point
Coord point[count-1] //
我正在处理各种UInt8 (小endian)数组,并需要将它们转换为Int64。在Swift 4中我用了
let array: [UInt8] = [13,164,167,80,4,0]
let raw = Int64(littleEndian: Data(array).withUnsafeBytes { $0.pointee })
print(raw) //18533032973
效果很好。然而,在Swift 5中,这种方式是不可取的,所以我切换到
let array: [UInt8] = [13,164,167,80,4,0]
let raw = array.withUnsafeBytes
我试图将Data?中包含的字节传递给C函数。C函数声明如下:
void func(const void *buffer);
我的斯威夫特看起来:
myData?.withUnsafeBytes { (buffer: UnsafeRawPointer) in
func(buffer)
}
但是,这会导致一个错误:
Cannot convert value of type '()' to closure result type '_'
如果我将UnsafeRawPointer更改为UnsafePointer<Void>,那么代码就会生成,但我会收
iOS 12.x Swift 5
我正在使用套接字与另一个框对话,我编写了这段代码,我认为这是有意义的。但我想和专家核实一下。我问这个问题是因为我觉得这个应用程序有点内存泄漏。我怀疑指针,就像你一样。我看着它使用的内存慢慢增加,因为我正在运行它。
func sendMessage(message: String) {
let data = message.data(using: String.Encoding.utf8, allowLossyConversion: false)!
let dataMutablePointer = UnsafeMutablePointer<
let data = Data()
data.withUnsafeBytes { (uPtr: UnsafePointer<UInt8>) in
var ptr = uPtr
var j = ptr.pointee
var new = ptr.advanced(by: 1)
}
j在这里表示或存储什么,它是否指向数据的下一个字节?新变量将存储下一个字节吗?在Swift中用更简单的方法学习指针的链接,以及在Swift中使用指针的优点是什么?
我对“警卫让”的说法有异议,这种说法很奇怪。整个代码在下面。即使readData和sizeOfData不是nil,方法readActivity(subdata: Data)中的语句readData块也被错误地执行。
代码
import Foundation
enum ActivityDataReaderError: Error {
case activityIsReadingOtherCentral
case bluetooth(Error?)
case staleData
}
protocol ActivityDataReaderDelegate: class {
我正在翻译一个从Java (安卓)到-> Swift (iPhone)的库
Java代码,工作正常:
long a = 48590108397870l;
short b = ((short)(a & 65535));//b == -28370
Swift代码:
let a : Int64 = 48590108397870
let b: Int16 = Int16(a & 65535)//Fatal error: Not enough bits to represent the passed value
问题
如何使用最新的(迅速5)数据API将Data()对象转换为Array of structs
示例
在Swift 5之前,我有以下代码将Data()对象转换为[Point]数组
import Foundation
struct Point {
let x: Float
let y: Float
}
let pt1 = Point(x: 1, y: 1)
let pt2 = Point(x: 2, y: 2)
let points: [Point] = [pt1, pt2]
let pointData = Data(
bytes: points,
co
我一直有一些问题,将使用NSData和CoreBluetooth的Objective代码片段转换为Swift。我看过和其他几个在Swift中与NSData打交道的人,但没有取得任何成功。
目标-C片段:
- (CGFloat) minTemperature
{
CGFloat result = NAN;
int16_t value = 0;
// characteristic is a CBCharacteristic
if (characteristic) {
[[characteristic value] getBytes:&va