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)
}