I’ve got an answer on Twitter for that behavior: https://twitter.com/phausler/status/743927492096851969
I’ve anyone like me needs Data to have a specific capacity and still be non-optional, here is how I build a workaround (Data and Data.Deallocator aren’t fully implemented yet, thats why I’m using a custom deallocator rather then .free): let capacity = 42 // or get the value somehow let dataBufferPointer = UnsafeMutablePointer<UInt8>(allocatingCapacity: capacity) dataBufferPointer.initialize(with: 0, count: capacity) // do some work and mutation to the data here let deallocator = Data.Deallocator.custom { (buffer, _) in free(buffer) } // this initializer says you should not mutate that data after constructing it let data = Data(bytesNoCopy: dataBufferPointer, count: capacity, deallocator: deallocator) -- Adrian Zubarev Sent with Airmail Am 19. Juni 2016 um 19:27:21, Saagar Jha (saagarjh...@gmail.com) schrieb: Not quite: Swift’s policy on memory allocation failure is that fixed-size object allocation is considered to be a runtime failure if it cannot be handled. OTOH, APIs that can take a variable and arbitrarily large amount to allocate should be failable. NSData falls into the later category. Source On Sun, Jun 19, 2016 at 10:00 AM Karl <razie...@gmail.com> wrote: As I understand it, that’s not an error in the ‘try’ sense of the word. If that failure happens, it’s a catastrophic issue which should bring down the application. So the initialiser shouldn’t be failable; you’re right. File a bug at bugs.swift.org. Karl On 18 Jun 2016, at 06:06, Saagar Jha via swift-users <swift-users@swift.org> wrote: This might be relavant. Basically, Data’s init will fail if memory can’t be allocated for it. On Fri, Jun 17, 2016 at 11:38 AM Adrian Zubarev via swift-users <swift-users@swift.org> wrote: Hello there, I’m trying to optimize my code and reduce copying from different buffers into a new one. I thought I just create a Data value with enough capacity and write directly into it. My problem is that Data.init?(capacity:) can fail, but why and when? Can someone explain this behavior to me? I’m sending data via TCP sockets and when recn function write directly into a Data struct. -- Adrian Zubarev Sent with Airmail _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users -- -Saagar Jha _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users -- -Saagar Jha
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users