小编Mav*_*vro的帖子

使用带有SWIFT的结构(字节) - 结构到NSData,NSData到结构

我试图理解结构在SWIFT中是如何工作的.我熟悉.NET如何处理它们以及它如何将字节打包到结构中等等.

我发现以下代码有些奇怪:

struct exampleStruct {
    var ModelNumber: Byte!
    var MajorVersion: Byte!
    var MinorVersion: Byte!
    var Revision: Byte!
}


var myStruct = exampleStruct (
    ModelNumber: 1,
    MajorVersion: 2,
    MinorVersion: 3,
    Revision: 4
)

myStruct.MinorVersion  // << Returns  3

// Struct to NSData.
var data = NSData(
    bytes: &myStruct,
    length: sizeof(exampleStruct)
)

println("data: \(data)")
Run Code Online (Sandbox Code Playgroud)

println返回:"data:<01000200 03000400>"

我期待数据实际上是:"数据:<01020304>"

知道为什么SWIFT没有将1个字节打包为1个字节,而是将一个字节打包为2个字节(1个字节的值和1个字节的00)?

另一方面,如果我执行以下操作:

var newStruct   = exampleStruct(ModelNumber: nil, MajorVersion: nil, MinorVersion: nil, Revision: nil)

var sendBytes:[Byte] = [0x1, 0x2, 0x3, 0x4]
var newData = NSData(bytes: sendBytes, …
Run Code Online (Sandbox Code Playgroud)

struct structure nsdata swift

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

使用SWIFT核心数据:如何从关系实体中删除对象?

我很难过,无法找到关于如何做到这一点的任何教程或文档.

问题:我有两个实体,Person和Location.人可以有很多地方.我已经正确设置了一切,可以在桌面视图中添加/删除人员,没问题.

我遇到的问题是在创建第一个之后尝试添加和删除位置 - 当第一次插入人时,它还会添加一个位置.

为此,PersonModel(Person Entity)类具有:

class PersonModel: NSManagedObject {

    @NSManaged var Name: String
    @NSManaged var Age: String
    @NSManaged var Location: NSOrderedSet

}
Run Code Online (Sandbox Code Playgroud)

LocationModel类(Location Entity)具有:

class LocationModel: NSManagedObject {

    @NSManaged var State: String
    @NSManaged var Person: PersonModel

}
Run Code Online (Sandbox Code Playgroud)

访问和删除位置实体中的项目的最佳方法是什么?我应该从PersonsModel还是通过LocationsModel删除对象?

执行以下操作:

func deleteObject(rowIndex:NSIndexPath){
  let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
  let managedContext = appDelegate.managedObjectContext!
  let fetchRequest = NSFetchRequest(entityName:"Locations")

  var error: NSError?
  locationsArray = managedContext.executeFetchRequest(fetchRequest,error: &error)!
  managedContext.deleteObject(locationsArray[rowIndex.row] as NSManagedObject)

  var error:NSError? = nil
    if (!managedContext.save(&error)){
        abort()
    }
 }
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为它返回所有位置,而不仅仅是与父/相关人员关联的对象的位置.必须有一个简单的方法来做到这一点 - 也许用谓词?

有人能指点我正确的方向吗? …

core-data relationship ios swift

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

在另一个阵列SWIFT 4中循环播放数组和组连续数字的最佳方法?

我正在尝试找出使用SWIFT 4循环遍历数字数组的最有效方法,获取任何连续数字的范围并将其添加到新数组中.我可以做标准循环检查,但我相信我可以使用地图过滤器? - 有人能指出我正确的方向吗?

开始:

myNumbersArray:[Int] = [1,2,3,4,10,11,15,20,21,22,23]
Run Code Online (Sandbox Code Playgroud)

通缉结果:

newNumbersArray = [
   [1,2,3,4],
   [10,11],
   [15],
   [20,21,22,23]
]
Run Code Online (Sandbox Code Playgroud)

如果我搞清楚,我会发布我的解决方案......

arrays swift

5
推荐指数
3
解决办法
409
查看次数

Swift 1.2(Xcode 6.3 Beta 4) - CCCrypt无法调用错误

刚更新到最新的Xcode 6.3 Beta 4,我收到一个我似乎无法弄清楚的错误.

有错误是:

无法使用类型'(CCOperation,CCAlgorithm,CCOptions,UnsafePointer,(Int),nil,UnsafePointer,UInt,UnsafeMutablePointer,(Int),inout UInt)的参数列表调用'CCCrypt''

使用以下代码:

let keyBytes         = UnsafePointer<UInt8>(keyData.bytes)
let keyLength        = size_t(kCCKeySizeAES128)

let dataLength    = UInt(self.length)
let dataBytes     = UnsafePointer<UInt8>(self.bytes)

let bufferData:NSMutableData! = NSMutableData(length:Int(dataLength) + kCCBlockSizeAES128)
var bufferPointer = UnsafeMutablePointer<UInt8>(bufferData.mutableBytes)
let bufferLength  = size_t(bufferData.length)

let operation: CCOperation = UInt32(kCCEncrypt)
let algoritm:  CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options:   CCOptions   = UInt32(kCCOptionECBMode)
var numBytesEncrypted: UInt = 0

var cryptStatus = CCCrypt(operation,
            algoritm,
            options,
            keyBytes,
            keyLength,
            nil,
            dataBytes,
            dataLength,
            bufferPointer,
            bufferLength,
            &numBytesEncrypted)
Run Code Online (Sandbox Code Playgroud)

这在Beta 3下工作得很好,即使在阅读Beta 4更改日志之后也不确定发生了什么变化.

不知道问题是什么,我应该打开Apple的错误吗?

xcode swift xcode6.3

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

“UnsafePointer&lt;UInt8&gt;”的初始化导致悬空指针

试图清除我的 SWIFT 5/XCODE 项目中的一些警告,但我陷入了这一困境:

 let sendBytes:[UInt8] = [0x0, 0x0, 0x5, 0x0]
 let msgData = Data(bytes: UnsafePointer<UInt8>(sendBytes), count: sendBytes.count)
 socket.write(msgData, withTimeout: -1.0, tag: 0)
 socket.readData(withTimeout: -1.0, tag: 0)
        
Run Code Online (Sandbox Code Playgroud)

对于“UnsafePointer”,我收到以下警告和两条建议:

“UnsafePointer”的初始化导致悬空指针

  1. 从“[UInt8]”到“UnsafePointer”的隐式参数转换生成一个仅在调用“init(_:)”期间有效的指针

  2. 在数组上使用“withUnsafeBufferPointer”方法,以便将参数显式转换为对定义范围有效的缓冲区指针

这是我的解决方案,更好吗?

版本1:

let sendBytes:[UInt8] = [0x0, 0x0, 0x5, 0x0]
let uint8Pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: sendBytes.count)
uint8Pointer.initialize(from: sendBytes, count: sendBytes.count)
let msgData = Data(bytes: uint8Pointer, count: sendBytes.count)
socket.write(msgData, withTimeout: -1.0, tag: 0)
socket.readData(withTimeout: -1.0, tag: 0)
Run Code Online (Sandbox Code Playgroud)

版本2:

let sendBytes:[UInt8] = [0x0, 0x0, 0x5, 0x0]                     
let uint8Pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: sendBytes.count)
uint8Pointer.initialize(from: sendBytes, …
Run Code Online (Sandbox Code Playgroud)

xcode swift swift5

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

如何在 Swift 2 中将 UInt8 转换为 Bool

我必须重做所有在 Swift 1.2 中使用布尔值的代码。现在在 Swift 2.0 中,我正确使用了 Bool,但我不清楚如何将 UInt8 (0/1) 转换为 Swift Bool。

例子:

 let timeDateValid:Bool = bytes[0]
Run Code Online (Sandbox Code Playgroud)

错误消息: 无法将类型“UInt8”转换为指定类型“Bool”

谢谢!

boolean swift

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

来自“24:00”字符串的 DateFormatter 返回 Nil

我似乎无法弄清楚为什么只有“24:00”返回 nil 而不是 12:00AM,而“23:59”正确返回为 11:59PM。

let dateAsString = "24:00"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale
let date = dateFormatter.date(from: dateAsString)
dateFormatter.dateFormat = "h:mm a"
let Date12 = dateFormatter.string(from: date!)
print(Date12)
Run Code Online (Sandbox Code Playgroud)

date ios swift

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

标签 统计

swift ×7

ios ×2

xcode ×2

arrays ×1

boolean ×1

core-data ×1

date ×1

nsdata ×1

relationship ×1

struct ×1

structure ×1

swift5 ×1

xcode6.3 ×1