ios – 在swift中不能在不同大小的类型之间使用unsafeBitCast
发布时间:2020-12-14 19:41:05 所属栏目:百科 来源:网络整理
导读:当我试图在数组中找到重复项时,我得到错误“不能在不同大小的类型之间进行unsafeBitCast”.我找到了重复的方法. func uniqS : SequenceType,T : Hashable where S.Generator.Element == T(source: S) - [T] { var buffer = [T]() var added = SetT() for ele
当我试图在数组中找到重复项时,我得到错误“不能在不同大小的类型之间进行unsafeBitCast”.我找到了重复的方法.
func uniq<S : SequenceType,T : Hashable where S.Generator.Element == T>(source: S) -> [T] { var buffer = [T]() var added = Set<T>() for elem in source { if !added.contains(elem) { buffer.append(elem) added.insert(elem) } } return buffer } func filter() { var arrayForSearch = mp3Files as! [String] var filteredArray = uniq(arrayForSearch) println("filtered array (filteredArray)") } 我在这个链接enter link description here上找到的重复查找方法.我使用Xcode 6和Swift 1.2 这段代码中有数组. var mp3Files: Array<String!>! func exportData() { var generalURL: [AnyObject]? var arrayFiles: Array<NSURL!>! var directory = fileManager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory,inDomains: NSSearchPathDomainMask.UserDomainMask) var urlFromDirectory = directory.first as! NSURL var file = fileManager.contentsOfDirectoryAtURL(urlFromDirectory,includingPropertiesForKeys: nil,options: NSDirectoryEnumerationOptions.SkipsHiddenFiles,error: nil)! println("file (file)") mp3Files = file.map(){ $0.lastPathComponent }.filter(){ $0.pathExtension == "mp3" } println("mp3 files (mp3Files)") } 当我在游乐场中编写此代码时,它可以工作. var array = ["Apple","Mac","iPhone","iPad Air","Apple","Air","Air"] var filteredArray = Array(Set(array)) println(filteredArray) 我如何在我的项目中使用它? 解决方法var mp3Files: Array<String!>! 哇,这是很多感叹号……他们不需要. var arrayForSearch = mp3Files as! [String] 并且mp3Files的类型永远不会与[String]相同,所以你不能强制它们之间的强制转换(如果它允许你会崩溃). 你经常使用隐式解包的选项.只在某些特殊情况下才需要它们.只需将mp3Files更改为[String](在这种情况下,你根本就不需要as !,你不应该经常使用as!). 同样,arrayFiles(你从不使用)应该只是[NSURL],而不是Array< NSURL!> !. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |