'[NSString?]'没有名为'componentsSeparatedByString'的成员

时间:2015-08-31 22:40:53

标签: ios xcode swift

我的var contentArray = urlContent.componentsSeparatedByString("")是抛出错误的代码。是因为我使用的是NSString吗?它也不会让代码完成工作正常。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var city: UITextField!
    @IBOutlet weak var message: UILabel!

    @IBAction func buttonPressed(sender: AnyObject) {

        var urlString = "http://www.weather-forecast.com/locations/" + city.text.stringByReplacingOccurrencesOfString(" ", withString: "") + "/forecasts/latest"

        var url = NSURL(string: urlString)

        let task = NSURLSession.sharedSession().dataTaskWithURL(url!){(data, response, error) in

            var urlContent = [NSString(data: data, encoding: NSUTF8StringEncoding)]
            var contentArray = urlContent.componentsSeparatedByString("")
        }
        task.resume()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

3 个答案:

答案 0 :(得分:3)

使用括号([])创建一个数组。只需删除[]即可。以下代码应该有效。我还打开了可选字符串。

if let urlContent = NSString(data: data, encoding: NSUTF8StringEncoding)
{
  let contentArray = urlContent.componentsSeparatedByString("")
}

答案 1 :(得分:2)

该调用的方括号是因为您一直在阅读Objective-C教程。

在swift中你正在创建一个数组。

删除它们。

下一步是该方法创建一个可选字符串。您需要先打开它才能使用该字符串。

阅读Apple免费提供的快速书籍。所有这些都在那里解释。你应该在发布任何更多问题之前阅读它,因为它将全部回答。

答案 2 :(得分:2)

正如其他人告诉你的那样,删除方括号。

另一部分信息是你正在使用的方法,

convenience init?(data data: NSData,
         encoding encoding: UInt)

是一个"可用的" init方法。您可以通过定义中的单词init之后的问号来判断。这意味着它可能无效。因此,init方法的结果是可选的。由于它是NSString的初始化,因此它的返回类型是Optional NSString,或NSString?

您需要打开可选项。 Adam的回答是,使用if let语法,称为"可选绑定。"它将表达式右侧的结果保存为新常量(urlContent),如果它是非零的,则在if之后运行代码。如果表达式 IS 的右侧为零,则跳过条件代码。