LoginSignup
14
10

More than 5 years have passed since last update.

[Swift]Array-配列を安全に

Last updated at Posted at 2016-10-14

作った理由

SwiftのArrayで Out Of Range でよく?落ちる
特にエラーを返す可能性のあるAPIとかで数値を間違えることがしばしば...
というわけで落ちないタイプの配列をつくった
ついでにnilを返さない辞書型も作った。

使い方


let array = ["a","b","c"]

print(array[safe: 1])//"b"
print(array[safe: 5])//""

print(array[force: 1])//Optional("b")
print(array[force: 5])//nil

let dict = ["a":"apple","b":"banana","c":"cap"]

print(dict[safe: "a"])//"apple"
print(dict[safe: "d"])//""


実装 

import UIKit


protocol DefaultValueContainedType {
    static var defaultValue: Self { get }
}

extension Array {
    subscript (force index:Int)->Element?{
        switch index {
        case self.indices:
            return self[index]

        default:
            return nil
        }
    }
}
extension Array where Element: DefaultValueProtocol{
    subscript (safe index: Int) -> Element {
        return self[force: index] ?? Element.defaultValue
    }
}

extension Dictionary where Value: DefaultValueProtocol {
    subscript (safe index: Key) -> Value {
        return self[index] ?? Value.defaultValue
    }
}

extension Int: DefaultValueProtocol {
    static var defaultValue: Int {
        return 0
    }
}
extension Bool:defaultValueProtocol{
    static var defaultValue: Bool{
        return false
    }
}
extension Double:defaultValueProtocol{
    static var defaultValue: Double{
        return 0.0
    }
}
extension Float:defaultValueProtocol{
    static var defaultValue: Float{
        return 0.0
    }
}
extension CGFloat:defaultValueProtocol{
    static var defaultValue: CGFloat{
        return 0.0
    }
}
extension String:defaultValueProtocol{
    static var defaultValue: String{
        return ""
    }
}
extension Array :defaultValueProtocol{
    static var defaultValue: Array{
        return []
    }
}
extension Dictionary :defaultValueProtocol{
    static var defaultValue: Dictionary{
        return [:]
    }
}
extension NSData: defaultValueProtocol{
    static var defaultValue: NSData{
        return NSData()
    }
}


14
10
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
10