Ios can';在swift中不同大小的类型之间进行不安全的Bitcast
当我试图在数组中查找重复项时,会出现错误“无法在不同大小的类型之间取消安全位广播”。我通过以下方法找到重复项Ios can';在swift中不同大小的类型之间进行不安全的Bitcast,ios,arrays,xcode,swift,Ios,Arrays,Xcode,Swift,当我试图在数组中查找重复项时,会出现错误“无法在不同大小的类型之间取消安全位广播”。我通过以下方法找到重复项 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
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)")
}
如何在我的项目中使用它?在这里,我尝试与您给出的代码相同的代码:
import UIKit
class ViewController: UIViewController {
let strArr = ["a","b","a","d","f","f","b"]
override func viewDidLoad() {
super.viewDidLoad()
filter()
}
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 = strArr
var newArr = uniq(arrayForSearch)
println("filtered array \(newArr)")
}
}
当您将数组强制转换为[String]
时,可能会出现问题,请再次检查
var mp3Files: Array<String!>!
而且mp3文件的类型
永远不能与[String]
相同,因此不能在它们之间强制强制强制转换(如果允许的话,会崩溃)
您经常使用隐式展开选项。只有在某些特殊情况下才需要它们。只需将mp3Files
更改为[String]
(在这种情况下,您根本不需要as!
;您也不应该经常需要as!
)
类似地,
arrayFiles
(您从未使用过),应该只是[NSURL]
,而不是数组代码>强制转换没有问题,因为MP3文件是数组!尝试更改它的类型,如[String]
,因此我在这里将其更改为var arrayForSearch=mp3Files as![String]您可以在声明时更改mp3文件的类型吗?
import UIKit
class ViewController: UIViewController {
let strArr = ["a","b","a","d","f","f","b"]
override func viewDidLoad() {
super.viewDidLoad()
filter()
}
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 = strArr
var newArr = uniq(arrayForSearch)
println("filtered array \(newArr)")
}
}
filtered array [a, b, d, f]
var mp3Files: Array<String!>!
var arrayForSearch = mp3Files as! [String]