swift NSNullを除去する

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift NSNullを除去する相关的知识,希望对你有一定的参考价值。

//
//  UnwrappedNSNull.swift
//  WeddingApps
//
//  Created by Kosuke Matsuda on 2016/06/24.
//  Copyright © 2016年 Appirits Inc. All rights reserved.
//

import Foundation

///
/// MARK: - UnwrappedNSNullable
///
protocol UnwrappedNSNullable {
    func reduceNSNull() -> Self
}


///
/// MARK: - extensions
///
extension Optional: UnwrappedNSNullable {
    func reduceNSNull() -> Optional<Wrapped> {
        switch self {
        case .Some(let value):
            if let g = unwrappedNSNull(value) {
                return .Some(g)
            }
            return self
        default:
            return self
        }
    }
}

extension Array: UnwrappedNSNullable {
    func reduceNSNull() -> [Element] {
        return reduce([Element]()) { (result, element) in
            var result = result
            if let value = unwrappedNSNull(element) {
                result.append(value)
            }
            return result
        }
    }
}

extension Dictionary: UnwrappedNSNullable {
    func reduceNSNull() -> [Key: Value] {
        return reduce([Key: Value]()) { (result, element) in
            var result = result
            if let value = unwrappedNSNull(element.1) {
                result[element.0] = value
            }
            return result
        }
    }
}

extension Set: UnwrappedNSNullable {
    func reduceNSNull() -> Set<Element> {
        return reduce(Set<Element>()) { (result, element) in
            var result = result
            if let value = unwrappedNSNull(element) {
                result.insert(value)
            }
            return result
        }
    }
}


///
/// MARK: - functions
///
public func unwrappedNSNull<T>(value: T?) -> T? {
    guard let v = value else {
        return value.reduceNSNull()
    }
    if v is NSNull {
        return nil
    }
    if let r = v as? UnwrappedNSNullable {
        return r.reduceNSNull() as? T
    }
    if let r = v as? NSArray {
        return (r as Array).reduceNSNull() as? T
    }
    if let r = v as? NSDictionary {
        return (r as Dictionary).reduceNSNull() as? T
    }
    if let r = v as? NSSet {
        return (r as Set).reduceNSNull() as? T
    }
    return v
}

以上是关于swift NSNullを除去する的主要内容,如果未能解决你的问题,请参考以下文章

swift 2つの可选型の値を场合分けして处理する书き方(场合分け时の处理は自分の环境での例です)

swift RxSwift:Observableを序列で同期处理に変更するref:https://qiita.com/hikarin522/items/187d48b25d9367170a51

swift 通知の登录を简単にする扩展名参考:http://qiita.com/mono0926/items/e3a76dc95046f0eeeb29

csharp シーン名を管理するEnumを作成するエディター拡张

csharp クラスのプロパティ,フィールド情报を取得する:リフレクションを使用する

scss 20180412 Chromeで画像を缩小表示すると文字がなんだかぼやける现象を回避するTips