繁体   English   中英

Swift 2:如何将动态数目的字符串分配给字符串数组?

[英]Swift 2: How can I assign a dynamic number of strings to an array of Strings?

语境:

我正在尝试创建一个基于正在运行的本地服务器中的文件夹内容填充UICollectionView(tvOS)的应用程序。 我尝试执行此操作的方法(可能是完全错误的方法)是“擦除”服务器页面的html。

我定义了以下属性:

let moviesArray: [String] = ["<li>Example 1</li>", "<li>Example 2</li>"]

我UICollectionView将返回UICollectionViewCell的相等数量moviesArray.count所以我需要这个数(与我不会在这个问题上的话语以及其他数据)。

问题:

我添加到服务器中的文件/文件夹的数量是动态的,并且会根据我添加或删除的电影数量而增加/减少。 显然,这将更改返回的html。

我有以下代码段,这些代码返回本地服务器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{$0 == "\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>元素的数量将String对象添加到self.moviesArrayself.moviesArray删除? 如果它是一个动态数字,如何将liSplit每个成员分配给self.moviesArray

您需要将moviesArray声明为变量,而不是常量,然后将其初始化:

var moviesArray = [String]()

然后,您可以继续并简单地将所有检索到的元素添加到其中:

moviesArray += liSplit

在Objective-C中有两种类型的数组, 1) NSArray 2) NSMutableArray

您不能向NSArray添加对象或从中删除对象。 您可以向NSMutableArray添加对象或从中删除对象。

很快,我们只有一个数组,即Array例如Array<String> or [String], Array<NSURL> or [NSURL], etc

如果用var关键字声明数组,它将是可变版本,因此您可以添加或删除对象, 例如

var arrayString : Array<String> = Array()
arrayString.append("Hitendra")
arrayString.append("Solanki")

如果用let关键字声明array,它将不是可变版本,因此您不能添加或删除对象, 例如

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{$0 == "\n"}.map(String.init)

for listItem in liSplit {
moviesArray.append(listItem)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM