Swift 4.1 Deinitialize and Deallocate(Capacity:) Deprecated

Swift 4.1 deinitialize and deallocate(capacity:) deprecated

Yes, that is part of SE-0184 Unsafe[Mutable][Raw][Buffer]Pointer: add missing methods, adjust existing labels for clarity, and remove deallocation size,
which has been implemented in Swift 4.1.

In particular:

Removing capacity from deallocate(capacity:) will end the confusion over what deallocate() does, making it obvious that deallocate() will free the entire memory block at self, just as if free() were called on it.

The old deallocate(capacity:) method should be marked as deprecated and eventually removed since it currently encourages dangerously incorrect code.

deinitialize() was obsoleted in swift 5.0

deinitialize now requires a count parameter indicating how many values you want to deinitialise.

From the context, the code is probably trying to deinitialise everything the pointer references, so the number of values we deinitialise will be equal to the number of values we allocate. This will be 1024 for buffer and 1 for entity.

You should replace those lines with:

buffer.deinitialize(count: 1024)
// and
entity.deinitialize(count: 1)

respectively

However, since this is code from a pod that you are modifying, make sure to check the terms in the licence of the pod to make sure you are not violating anything.

You should also inform the author of the pod that the pod needs updating. This API change is made in Swift 4.1, I think, so it's quite old.

Initialise Dictionary with Objects and Keys in Swift 4

You are using an NSDictionary (not Swift's Dictionary) method which takes an array of objects and a matching array of keys - note the plurals! You have one key whose matching value is an array. Just use a Swift dictionary literal:

let monthDictionary = [ "values" : months ]

Note: You will want to use var rather than let if you intend to add more keys & values.

Struct is fileprivate and cannot be referenced from a default argument value in swift 4.1

There are two fixes as stated below,

1) Take Defaults struct out of DropdownAlert and make it public even properties also as you want to pass them in method signature as below,

public struct Defaults {
public static var BackgroundColor = UIColor.white
public static var TextColor = UIColor.black
public static var Title = "Default Title"
}

class func showWithAnimation(_ animationType: AnimationType = .basic(timingFunction: CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)),
title: String = Defaults.Title,
message: String = Defaults.Message) {
}

2) Keep Defaults inside DropdownAlert but make it public including properties also. And access as below,

class func showWithAnimation(_ animationType: AnimationType = .basic(timingFunction: CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)),
title: String = DropdownAlert.Defaults.Title,
message: String = DropdownAlert.Defaults.Message) {
}


Related Topics



Leave a reply



Submit