Swift 2:如何将动态数量的字符串分配给字符串数组?
Swift 2: How can I assign a dynamic number of strings to an array of Strings?
上下文:
我正在尝试创建一个基于本地服务器文件夹内容填充 UICollectionView (tvOS) 的应用程序,我是 运行。我尝试这样做的方式(这可能是完全错误的方式)是 'scrape' 我的服务器页面的 html。
我定义了以下 属性:
let moviesArray: [String] = ["<li>Example 1</li>", "<li>Example 2</li>"]
我的 UICollectionView 将 return UICollectionViewCell 的数量等于 moviesArray.count
所以我需要这个数字(以及我不会在这个问题中谈到的额外数据)。
问题:
我添加到服务器的 files/folders 数量是动态的,会根据我添加或删除的电影而增加/减少。这显然会改变 html,即 returned.
我有以下代码 returns 我本地服务器 URL 的 html 并将其转换为字符串。然后我根据范围创建子字符串,然后从 html 中拆分出每个单独的 <li>
元素。这是代码:
do {
let url:NSURL? = NSURL(string: "http://localhost:8888/Files/movies/")
// 'contentsOfURL' returns the html code of the page
let html:String? = try NSString(contentsOfURL: url!, encoding: NSUTF8StringEncoding) as String
print(html)
// creates a substring of 'html' based on a range defined below
let ulString = html![(html?.startIndex.advancedBy(164))!...(html?.endIndex.advancedBy(-22))!]
print("<ul> substring is: \(ulString)")
// Splits each <li> into a separate string
let liSplit = ulString.characters.split{[=11=] == "\n"}.map(String.init)
print("li 1 is: \(liSplit[0])")
print("li 2 is: \(liSplit[1])")
print("li 3 is: \(liSplit[2])")
} catch {
print("the error is: \(error)")
}
我的问题:
如何根据 html 字符串中 <li>
元素的数量向 self.moviesArray
添加或删除 String
个对象,即 return编?如果 liSplit
是动态号码,我如何将每个成员分配给 self.moviesArray
?
您需要将您 moviesArray
声明为变量,而不是常量并初始化它:
var moviesArray = [String]()
然后您可以继续,只需将所有检索到的元素添加到其中:
moviesArray += liSplit
Objective-C中有两种数组,
1) NSArray
2) NSMutableArray
您不能向 NSArray 添加对象或从中删除对象。
您可以向 NSMutableArray 添加对象或从中删除对象。
在swift中,我们只有一个数组,即Array
例如Array<String> or [String], Array<NSURL> or [NSURL], etc
如果你用var
关键字声明数组,它将是可变版本,所以你可以添加或删除对象
例如
var arrayString : Array<String> = Array()
arrayString.append("Hitendra")
arrayString.append("Solanki")
如果你用let
关键字声明数组,它将不是可变版本,所以你不能添加或删除对象
例如
var arrayString : Array<String> = Array()
arrayString.append("Hitendra")//not allowed
arrayString.append("Solanki")//not allowed
所以只需更改
let moviesArray: [String] = ["<li>Example 1</li>", "<li>Example 2</li>"]
至
var moviesArray: [String] = ["<li>Example 1</li>", "<li>Example 2</li>"]
并使用以下行,
let liSplit = ulString.characters.split{[=14=] == "\n"}.map(String.init)
for listItem in liSplit {
moviesArray.append(listItem)
}
上下文:
我正在尝试创建一个基于本地服务器文件夹内容填充 UICollectionView (tvOS) 的应用程序,我是 运行。我尝试这样做的方式(这可能是完全错误的方式)是 'scrape' 我的服务器页面的 html。
我定义了以下 属性:
let moviesArray: [String] = ["<li>Example 1</li>", "<li>Example 2</li>"]
我的 UICollectionView 将 return UICollectionViewCell 的数量等于 moviesArray.count
所以我需要这个数字(以及我不会在这个问题中谈到的额外数据)。
问题:
我添加到服务器的 files/folders 数量是动态的,会根据我添加或删除的电影而增加/减少。这显然会改变 html,即 returned.
我有以下代码 returns 我本地服务器 URL 的 html 并将其转换为字符串。然后我根据范围创建子字符串,然后从 html 中拆分出每个单独的 <li>
元素。这是代码:
do {
let url:NSURL? = NSURL(string: "http://localhost:8888/Files/movies/")
// 'contentsOfURL' returns the html code of the page
let html:String? = try NSString(contentsOfURL: url!, encoding: NSUTF8StringEncoding) as String
print(html)
// creates a substring of 'html' based on a range defined below
let ulString = html![(html?.startIndex.advancedBy(164))!...(html?.endIndex.advancedBy(-22))!]
print("<ul> substring is: \(ulString)")
// Splits each <li> into a separate string
let liSplit = ulString.characters.split{[=11=] == "\n"}.map(String.init)
print("li 1 is: \(liSplit[0])")
print("li 2 is: \(liSplit[1])")
print("li 3 is: \(liSplit[2])")
} catch {
print("the error is: \(error)")
}
我的问题:
如何根据 html 字符串中 <li>
元素的数量向 self.moviesArray
添加或删除 String
个对象,即 return编?如果 liSplit
是动态号码,我如何将每个成员分配给 self.moviesArray
?
您需要将您 moviesArray
声明为变量,而不是常量并初始化它:
var moviesArray = [String]()
然后您可以继续,只需将所有检索到的元素添加到其中:
moviesArray += liSplit
Objective-C中有两种数组,
1) NSArray
2) NSMutableArray
您不能向 NSArray 添加对象或从中删除对象。 您可以向 NSMutableArray 添加对象或从中删除对象。
在swift中,我们只有一个数组,即Array
例如Array<String> or [String], Array<NSURL> or [NSURL], etc
如果你用var
关键字声明数组,它将是可变版本,所以你可以添加或删除对象
例如
var arrayString : Array<String> = Array()
arrayString.append("Hitendra")
arrayString.append("Solanki")
如果你用let
关键字声明数组,它将不是可变版本,所以你不能添加或删除对象
例如
var arrayString : Array<String> = Array()
arrayString.append("Hitendra")//not allowed
arrayString.append("Solanki")//not allowed
所以只需更改
let moviesArray: [String] = ["<li>Example 1</li>", "<li>Example 2</li>"]
至
var moviesArray: [String] = ["<li>Example 1</li>", "<li>Example 2</li>"]
并使用以下行,
let liSplit = ulString.characters.split{[=14=] == "\n"}.map(String.init)
for listItem in liSplit {
moviesArray.append(listItem)
}