如何将带有String字段的“Tag”对象的NSSet转换为[String]?

时间:2015-07-30 02:07:35

标签: ios swift core-data ios8 ios9

var tmpImg = self.dbManager.getPhotoItemById(ptempArr[imageIndex].photoId)

    var nss = tmpImg!.tags // NSet of "Tag" objects with a String "tagName" field

    let arr = map(nss, { "\($0)" })


    customView!.setLabelArray(arr) // I want arr to become an array of tagNames. 

Ex)标记对象:{tagName:“tag1”},{tagName:“tag2”}

我希望arr成为[“tag1”,“tag2”]

2 个答案:

答案 0 :(得分:1)

Swifts的map功能是可行的方法。但是,你必须小心强制解包。

let stringArray = tagArray.map { $0.tagName! } // crashes if tagName is nil

更安全的:

let stringArray = tagArray.filter { $0.tagName != nil }.map { $0.tagName! }

答案 1 :(得分:0)

这会将NSSetTag个对象转换为[String]

let arr = nss.allObjects.map {$0.tagName ?? ""}

首先致电allObjects以获取[AnyObject],然后使用map获取tagName。如果tagNamenil nil合并运算符 ??将使用空字符串""替换它,否则它将被解包。< / p>

或者更简单地说,这些也适用于 Swift 1.2

let arr = map(nss, {$0.tagName ?? ""})

let arr = map(nss) {$0.tagName ?? ""}

Swift 2.0

let arr = nss.map {$0.tagName ?? ""}