这可能是一个基本问题,但我试图弄清楚如何通过视图控制器将字符串“附加”到URL,并让它们维护。更具体地说;
我正在构建一个基本的文件浏览器应用程序,它从Web服务(XML格式)中获取数据。每次用户点击“文件夹”(在表格视图中显示为文件夹列表)时,都会通过NSURL会话发出另一个请求,以获取 文件夹的内容。< / p>
我的问题是,URL字符串仅附加用户点击的行的名称,但我不确定如何填充用户点击的所有行。
let urlString = "http://myurl/"
用户点击所需的文件夹后......
let urlString = "http://myurl/\(tappedRow)"
// This prints as http://myurl/firstfoldername/
用户点击下一个想要的文件夹后......
let urlString = "http://myurl/\(tappedRow)"
// This prints as http://myurl/secondfoldername/
// But I want http://myurl/firstfoldername/secondfoldername/
由于我只是从TableViewController转向自身,并重新加载表,我认为这是正常的,但我试图让url字符串继续将tapped行追加到最后,而不是忘记每一行时间。我在考虑使用NSUserDefaults保留最后一个URL,但我意识到这一定是常见的事情,也许还有更好的方法。谢谢!
答案 0 :(得分:1)
override func viewDidLoad() {
super.viewDidLoad()
let baseUrlString = "http://myUrl/"
var currentUrl = baseUrlString
}
func cellTapped() {
currentUrl += tappedRow
}
答案 1 :(得分:0)
将urlString
声明为任何方法之外的实例变量
var urlString = "http://myurl"
定义一个函数addPathComponent()
并在每次点击一行时调用它,并将文件夹名称作为参数传递。使用方法stringByAppendingPathComponent
可以避免与斜杠路径分隔符混淆。
func addPathComponent(component : String)
{
urlString = urlString.stringByAppendingPathComponent(component)
// do something with the new urlString value
}
答案 2 :(得分:0)
您可以使用Stack of Strings
。我准备了这个singleton class
。
class StackFolder {
private var path = [String]()
static let sharedInstance = StackFolder()
private init() {}
static private let basePath = "http://myurl"
var baseURL = NSURL(string: basePath + "/")!
func push(folder: String) {
path.append(folder)
}
func pop() {
path.removeLast()
}
func toURL() -> NSURL {
let folders = path.reduce("/") { $0 + $1 + "/" }
let adddress = Stack.basePath + folders
return NSURL(string: adddress)!
}
}
您只需要检索Stack的共享实例,并且:
push
pop
。这是一个例子:
StackFolder.sharedInstance.push("folder1")
StackFolder.sharedInstance.toURL().absoluteString // "http://myurl/folder1/"
StackFolder.sharedInstance.push("folder2")
StackFolder.sharedInstance.toURL().absoluteString // "http://myurl/folder1/folder2/"
StackFolder.sharedInstance.pop()
StackFolder.sharedInstance.toURL().absoluteString // "http://myurl/folder1/"
由于Stack是Singleton,因此您无需将对同一Stack对象的引用从一个视图控制器传递给另一个视图控制器。每次在应用程序中编写Stack.sharedInstance
时,您都会自动获得对Stack唯一实例的引用。
希望这有帮助。