不能在“自我”错误中分配“参数” - 来自CS193p斯坦福在线课程

时间:2015-04-21 21:39:53

标签: ios xcode swift cs193p

我目前正在处理Smashtag应用程序,可以在此处下载:http://web.stanford.edu/class/cs193p/cgi-bin/drupal/

我一直关注iTunes U视频(YouTube链接:https://www.youtube.com/watch?v=ZIwaIEfPAh8&spfreload=10),我无法理解我遇到的错误。

即使从斯坦福网站下载应用程序的最终副本后,我也看到这些Swift编译器错误仍然出现。

继续说不能在'self'中分配'参数'

这个Smashtag应用学习课程于2015年2月/ 3月发布后,是否可以将Xcode更新为6.3?

感谢您的帮助,不知道目前如何解决这个问题。

private var twitterAccount: ACAccount?

public class TwitterRequest
{
    public let requestType: String
    public let parameters = Dictionary<String, String>()

    // designated initializer
    public init(_ requestType: String, _ parameters: Dictionary<String, String> = [:]) {
        self.requestType = requestType
        **self.parameters = parameters**
    }

    // convenience initializer for creating a TwitterRequest that is a search for Tweets
    public convenience init(search: String, count: Int = 0, _ resultType: SearchResultType = .Mixed, _ region: CLCircularRegion? = nil) {
        var parameters = [TwitterKey.Query : search]
        if count > 0 {
            parameters[TwitterKey.Count] = "\(count)"
        }
        switch resultType {
            case .Recent: parameters[TwitterKey.ResultType] = TwitterKey.ResultTypeRecent
            case .Popular: parameters[TwitterKey.ResultType] = TwitterKey.ResultTypePopular
            default: break
        }
        if let geocode = region {
            parameters[TwitterKey.Geocode] = "\(geocode.center.latitude),\(geocode.center.longitude),\(geocode.radius/1000.0)km"
        }
        self.init(TwitterKey.SearchForTweets, parameters)
    }

    public enum SearchResultType {
        case Mixed
        case Recent
        case Popular
    }

1 个答案:

答案 0 :(得分:1)

从Swift 1.2开始,给你的常量变量一个初始值(不在init中)意味着它们不能在init中重新赋值。因此,由于您要将parameters的初始值设置为空字典,因此无法在parameters中为init提供新值。要解决此问题,请将代码更改为:

public class TwitterRequest {
    public let requestType: String

    // Note - now we just define the type here. 
    public let parameters: Dictionary<String, String>

    public init(_ requestType: String, _ parameters: Dictionary<String, String> = [:]) {
        self.requestType = requestType
        self.parameters = parameters
    }

    // Other stuff
}

另外,您可以将parameters更改为var,正如@Thomas Kilian在评论中指出的那样。但是,如果您不打算更改parameters中存储的值,则将其声明为let并使用上述代码更有意义。