Невозможно назначить «параметры» в «самостоятельной» ошибке - из CS193p Stanford Online Course

В настоящее время я работаю над приложением Smashtag, которое можно скачать здесь: http://web.stanford.edu/class/cs193p/cgi-bin/drupal/

Я следил за видео в iTunes U (ссылка на YouTube: https://www.youtube.com/watch?v=ZIwaIEfPAh8&spfreload=10 ), и я не могу избавиться от ошибок, которые я получаю.

Даже после загрузки окончательной копии приложения с веб-сайта Стэнфорда я вижу, что эти ошибки компилятора Swift все еще появляются.

Он продолжает говорить, что невозможно назначить «параметры» в «я».

Может ли это быть связано с обновлением Xcode до версии 6.3 после того, как в феврале/марте 2015 года был выпущен этот обучающий курс по приложению Smashtag?

Я ценю вашу помощь, не знаю, как решить эту проблему на данный момент.

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
    }

person Tommy    schedule 21.04.2015    source источник
comment
параметры кажутся let. Сделай это var   -  person qwerty_so    schedule 22.04.2015


Ответы (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 и использовать приведенный выше код.

person ABakerSmith    schedule 21.04.2015