我使用Swift 4.1和XCode 9.3
var upsList = [Any]()
func loadUpsValues () {
print("loadUpsValues")
let upsFileAsURL = URL(string: "Upslist.txt")
// Original Objective C Call was: NSMutableArray *ListUpsArray = [NSMutableArray arrayWithContentsOfURL:upsFile];
//
let upsList = NSArray(contentsOfURL:upsFileAsURL! )
}
我收到错误:Ambiguous use of 'init(contentsOfURL:)'
似乎NSArray
的来源来自同一个基础定义:
我有两次:
1 Found this candidate (Foundation.NSArray) 2 Found this candidate (Foundation.NSArray)
感谢您的帮助
答案 0 :(得分:1)
此错误是因为Swift中不存在[NS(Mutable)Array arrayWithContentsOfURL:];
。
对于swift,NSArray
初始化程序已更改为更加“swifty”,因此它变为:
NSArray(contentsOf:)
见here。
所以改变你的最后一行,代码应按预期运行,即:
let upsList = NSArray(contentsOf: upsFileAsURL!)
修改强>
继续@nayem的评论。假设您的文本文件是一组行,您可以将代码更改为无需依赖基于NS的对象,如下所示:
func loadUpsValues () {
do {
guard let url = Bundle.main.url(forResource: "Upslist", withExtension: "txt") else { return }
let data = try String(contentsOf: url)
let upsList = data.components(separatedBy: NSCharacterSet.newlines)
...
} catch {
/* handle error */
}
}
答案 1 :(得分:0)
看看这个解决方案:
您已经声明了一次upsList,为什么再次将其声明为 let 这个解决方案有效。
var upsList = NSArray()
func loadUpsValues () {
print("loadUpsValues")
let upsFileAsURL = URL(string: "Upslist.txt")
// Original Objective C Call was: NSMutableArray *ListUpsArray = [NSMutableArray arrayWithContentsOfURL:upsFile];
//
upsList = NSArray(contentsOf: upsFileAsURL! ) ?? NSArray()
}