快速从字典中提取数值

空闲时间

我需要从字典中提取数据(来自NSXMLParser的属性,但是我认为这并不重要)。下面的方法有效,但这真的是“最简单”的原因吗?该属性在字典中可能存在也可能不存在。该属性的值可能会也可能不会转换为整数(即​​toInt()返回可选值)。“强制性”是布尔型,“ minimumLength”是Int且是类属性。

  func decodeDataRestrictions(#attributeDictionary: [NSObject: AnyObject]!) {
var stringValue: String?
var intValue: Int?

// Extract data restrictions from the element attributes
self.mandatory = false
stringValue = attributeDictionary["mandatory"] as String?
if stringValue != nil {
  if stringValue! == "true" {
    self.mandatory = true
  }
}
self.minimumLength = 1
stringValue = attributeDictionary["minimumLength"] as String?
if stringValue != nil {
  intValue = stringValue!.toInt()
  if intValue != nil {
    self.minimumLength = intValue!
  }
}

在Objective-C中,这要容易得多:

    self.mandatory = NO;
if ([[attributeDict objectForKey:@"mandatory"] isEqualToString:@"true"]) {
  self.mandatory = YES;
}
self.minimumLength = 1;
if ([attributeDict objectForKey:@"minimumLength"] != nil) {
  self.minimumLength = [NSNumber numberWithInteger:[[attributeDict objectForKey:@"minimumLength"] integerValue]];      
}
空速

您应该能够按照以下方式编写整个函数:

func decodeDataRestrictions(#attributeDictionary: [NSObject: AnyObject]!) {

    if (attributeDictionary["mandatory"] as? String) == "true" {
        self.mandatory == true
    }

    if let minimumLength = (attributeDictionary["minimumLength"] as? String)?.toInt() {
            self.minimumLength = minimumLength
    }
}

如果您需要检查nil-ness的可选值,然后在不为nil的情况下使用该值,则将if let这两件事结合在一起,如果非nil,则将局部变量设置为unwrapped值。这就是发生的事情minimumLength,以及一些可选的链接(即,如果值不为nil,则继续执行toInt()其他nil)。

对于mandatory,您可以使用来比较可选值和非可选值==,因此根本不需要检查nil。

编辑:阅读了Objective-C版本后,self即使在缺少字典数据的情况下乐于默认,也可以进一步简化它,就像这样做:

func decodeDataRestrictions(#attributeDictionary: [NSObject: AnyObject]!) {

    self.mandatory = (attributeDictionary["mandatory"] as? String) == "true"        
    self.minimumLength = (attributeDictionary["minimumLength"] as? String)?.toInt() ?? 1

}

minimumLength版本使用nil-coalescing运算符,如果左侧为nil,它将替换右侧的默认值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章