How do you unwrap Swift optionals?

前端 未结 5 1197
难免孤独
难免孤独 2020-11-27 04:14

How do you properly unwrap both normal and implicit optionals?

There seems to be confusion in this topic and I would just like to have a reference for all of the way

5条回答
  •  清歌不尽
    2020-11-27 04:59

    I created an approach to unwrap optional value:

    // MARK: - Modules
    import Foundation
    import UIKit
    import CoreData
    
    // MARK: - PROTOCOL
    protocol OptionalType { init() }
    
    // MARK: - EXTENSIONS
    extension String: OptionalType {}
    extension Int: OptionalType {}
    extension Double: OptionalType {}
    extension Bool: OptionalType {}
    extension Float: OptionalType {}
    extension CGFloat: OptionalType {}
    extension CGRect: OptionalType {}
    extension UIImage: OptionalType {}
    extension IndexPath: OptionalType {}
    extension Date: OptionalType {}
    extension UIFont: OptionalType {}
    extension UIColor: OptionalType {}
    extension UIViewController: OptionalType {}
    extension UIView: OptionalType {}
    extension NSMutableDictionary: OptionalType {}
    extension NSMutableArray: OptionalType {}
    extension NSMutableSet: OptionalType {}
    extension NSEntityDescription: OptionalType {}
    extension Int64: OptionalType {}
    extension CGPoint: OptionalType {}
    extension Data: OptionalType {}
    extension NSManagedObjectContext: OptionalType {}
    
    prefix operator ?*
    
    //unwrapping values
    prefix func ?*( value: T?) -> T {
        guard let validValue = value else { return T() }
        return validValue
    }
    

    You can add your custom data type also.

    Usage:-

    var myString = ?*str
    

    Hope it helps :)

提交回复
热议问题