any判断是否为空 swift
2017-09-05 16:59:05 bitcser 阅读数 5224

跟后台交互的时候,经常返回<null>这种

直接用 **  is NSNull  判断就可以了


2016-03-31 14:44:22 junk1357 阅读数 7999

最近一直在纳闷如何去判断AnyObject类型为空,像以前oc中有nil进行判断就可以了,但是它却不能使用此方法进行判断;

而我在很多数据请求的时候又需要使用AnyObject类型作为返回值,研究了很久都没找到有效的判断方式,今天仔细研究了下它的数据结构,终于找到了方法;

首先来分析下它的数据结构,下面分有数据和没有数据的时候进行区分:

1、有数据的时候:

▿ Optional<AnyObject>

  ▿ Some : 2 elements

    ▿ [0] : 15 elements

      ▿ [0] : 2 elements

        - .0 : systime

      ▿ [1] : 2 elements

        - .0 : contxt

    ▿ [1] : 15 elements

      ▿ [0] : 2 elements

        - .0 : systime

      ▿ [1] : 2 elements

        - .0 : contxt { ... }


2、没有数据的时候:

 Optional<AnyObject>

  - Some : <null>


从上面的两种情况就可以看出来在有数据的时候它是采用了计数的方式进行存储的,有点像数组;那么此时应该就可以类似于数组判断元素个数的方式调用count函数进行判断是否存在元素;

而从没有值的情况就会发现它给出的是<null>,这让我想到了NSNull类,但是我使用这种方式判断的时候也不行,编译都没法通过;


所以综合起来最终的解决方式就是将其当作一个容器来进行处理,容器中存储元素,那么就可以获取容器中元素的个数,若个数为0那么说明容器中不存在任何元素;


最终判断AnyObject为空操作就是依靠count函数即可    AnyObject.count<=0  即表示AnyObject为空

2018-11-03 19:20:00 weixin_33700350 阅读数 6
// MARK: - 分类.  时间间隔判断
extension Date {
    // MARK: - private method
    // MARK: 两个日期的间隔
    private func daysBetweenDate(toDate: Date) -> Int {
        let components = Calendar.current.dateComponents([.day], from: self, to: toDate)
        return abs(components.day!)
    }
    
    // MARK: 日期对应当周的周几. 周一为开始, 周天为结束
    private func dayForWeekAtIndex() -> Int {
        let components = Calendar.current.dateComponents([.weekday], from: self)
        
        return (components.weekday! - 1) == 0 ? 7 : (components.weekday! - 1)
    }
    
    // MARK: - public method
    // MARK: 判断是否为同一周
    func isSameWeek(date: Date) -> Bool {
        let differ = self.daysBetweenDate(toDate: date)
        // 判断哪一个日期更早
        let compareResult = Calendar.current.compare(self, to: date, toGranularity: Calendar.Component.day)
        
        // 获取更早的日期
        var earlyDate: Date
        if compareResult == ComparisonResult.orderedAscending {
            earlyDate = self
        }else {
            earlyDate = date
        }
        print(earlyDate)
        
        let indexOfWeek = earlyDate.dayForWeekAtIndex()
        let result = differ + indexOfWeek
        
        return result > 7 ? false : true
    }
2018-12-26 13:42:33 hengyunbin 阅读数 417

// 判断输入的字符串是否为数字,不含其它字符

    func isPurnInt(string: String) -> Bool {

        let scan: Scanner = Scanner(string: string)

        var val:Int = 0

        return scan.scanInt(&val) && scan.isAtEnd

    }

2018-09-01 10:29:00 weixin_33690963 阅读数 109

代码中会经常对字符串做是否为空的判断,OC中一般定义一个宏定义,直接调用就可以了:

#define DYNSStringIsEmpty(str) ((str==nil)||[str isEqualToString:@"(null)"]||([str length]==0)||[str isEqualToString:@""])

Swift 中如何处理呢,因为Swift对变量的类型要求的比较严格,经常会提示各种警告,经过个反复的尝试,写成了下面的这个样子。

//value 是AnyObject类型是因为有可能所传的值不是String类型,有可能是其他任意的类型。
func DYStringIsEmpty(value: AnyObject?) -> Bool {
    //首先判断是否为nil
    if (nil == value) {
        //对象是nil,直接认为是空串
        return true
    }else{
        //然后是否可以转化为String
        if let myValue  = value as? String{
            //然后对String做判断
            return myValue == "" || myValue == "(null)" || 0 == myValue.count
        }else{
            //字符串都不是,直接认为是空串
            return true
        }
    }
}

调用的时候有点怪异,需要把传的值先转化为AnyObject,不然会报一些类型的警告。

if DYStringIsEmpty(value: self.isSelected as AnyObject) {
     self.isSelected = "0"
}        

Ps:如有误导,欢迎指正...

swift Any AnyObject

阅读数 20

AnyandAnyObjectAnyandAnyObject

博文 来自: weixin_34080951

Swift Any & AnyObject

阅读数 294

swift Any AnyObject

阅读数 373

没有更多推荐了,返回首页