【问题标题】:Array.filter with inline regexArray.filter 与内联正则表达式
【发布时间】:2020-01-12 03:38:11
【问题描述】:

我正在编写一个函数,它给定一个对象数组,其中包含一个名为 url 的属性,删除所有带有 bad url 的对象。

这是我所拥有的:

func cleanArray(data:[String: Any])->Void {
   let uris = data.filter{($0["url"] as! String).range(of: #"^(https?|file|ftp)"#, options: .regularExpression) != nil };
}

但是 xcode 在$0 中显示错误:

元组类型'(key: String, value: Any)'的值没有成员'subscript'

【问题讨论】:

  • 要检查字符串是否为有效 URL,请查看此处stackoverflow.com/questions/28079123/…
  • 您不应该对原始的String 进行这样的 URL 操作。您应该将字典中的数据提取到结构中,并在结构的初始化程序中执行此验证。您的代码甚至不需要正则表达式。如果只使用 URL API 会简单得多,这将允许您编写:["http", "https", "file", "ftp"].contains(url.scheme)

标签: swift swift5


【解决方案1】:

[String: Any]是字典,你需要[[String: Any]]

func cleanArray(data:[[String: Any]]) -> Void { 
    let uris = data.filter{ ($0["url"] as! String).range(of: #"^(https?|file|ftp)"#, options: .regularExpression) != nil };
}

如果你把它变成一个模型数组,这可能会更加面向对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多