将数据附加到 Swift 中的 URL
Appending Data To URL In Swift
这可能是一个基本问题,但我正在尝试弄清楚如何通过视图控制器将 "append" 字符串转换为 URL,并让它们得到维护。更具体地说;
我正在构建一个基本的文件浏览器应用程序,它从网络服务(XML)表单中获取数据。每次用户点击 "folder"(在 Table 视图中显示为文件夹列表)时,都会通过 NSURL 会话发出另一个请求以获取内容那个文件夹。
我的问题是 URL 字符串仅附加用户点击的行的名称,但我不确定如何让它填充 all 行用户点击了。
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 到它自己,并重新加载 table,我认为这是按预期工作的,但我试图让url string 继续将点击的行附加到末尾,而不是每次都忘记。我正在考虑使用 NSUserDefaults 来保留最后一个 URL,但我意识到这一定很常见,也许有更好的方法。谢谢!
override func viewDidLoad() {
super.viewDidLoad()
let baseUrlString = "http://myUrl/"
var currentUrl = baseUrlString
}
func cellTapped() {
currentUrl += tappedRow
}
在任何方法之外声明urlString
作为实例变量
var urlString = "http://myurl"
定义一个函数 addPathComponent()
并在每次点击一行时调用它,并将文件夹名称作为参数。使用方法 stringByAppendingPathComponent
避免与斜杠路径分隔符混淆。
func addPathComponent(component : String)
{
urlString = urlString.stringByAppendingPathComponent(component)
// do something with the new urlString value
}
您可以使用 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("/") { [=10=] + + "/" }
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 是单例,因此您不需要将对同一 Stack 对象的引用从一个视图控制器传递到另一个视图控制器。每次您在应用程序中编写 Stack.sharedInstance
时,您都会自动获得对 Stack 唯一实例的引用。
希望对您有所帮助。
这可能是一个基本问题,但我正在尝试弄清楚如何通过视图控制器将 "append" 字符串转换为 URL,并让它们得到维护。更具体地说;
我正在构建一个基本的文件浏览器应用程序,它从网络服务(XML)表单中获取数据。每次用户点击 "folder"(在 Table 视图中显示为文件夹列表)时,都会通过 NSURL 会话发出另一个请求以获取内容那个文件夹。
我的问题是 URL 字符串仅附加用户点击的行的名称,但我不确定如何让它填充 all 行用户点击了。
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 到它自己,并重新加载 table,我认为这是按预期工作的,但我试图让url string 继续将点击的行附加到末尾,而不是每次都忘记。我正在考虑使用 NSUserDefaults 来保留最后一个 URL,但我意识到这一定很常见,也许有更好的方法。谢谢!
override func viewDidLoad() {
super.viewDidLoad()
let baseUrlString = "http://myUrl/"
var currentUrl = baseUrlString
}
func cellTapped() {
currentUrl += tappedRow
}
在任何方法之外声明urlString
作为实例变量
var urlString = "http://myurl"
定义一个函数 addPathComponent()
并在每次点击一行时调用它,并将文件夹名称作为参数。使用方法 stringByAppendingPathComponent
避免与斜杠路径分隔符混淆。
func addPathComponent(component : String)
{
urlString = urlString.stringByAppendingPathComponent(component)
// do something with the new urlString value
}
您可以使用 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("/") { [=10=] + + "/" }
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 是单例,因此您不需要将对同一 Stack 对象的引用从一个视图控制器传递到另一个视图控制器。每次您在应用程序中编写 Stack.sharedInstance
时,您都会自动获得对 Stack 唯一实例的引用。
希望对您有所帮助。