При создании объекта выдает ошибку

managedobject
swift3

#1

подскажите новичку, создал класс, при этом хочу обойтись без инициализатора, сразу задаю стартовые значения и по идее Swift должен сам вывести тип, ошибок не показывает. Затем создаю экземпляр класса, присваиваю значения переменным и выскакивает ошибка. Не могу понять почему

class Account {
var capital = 0.0 // сумма вклада
var rate = 0.0 // процентная ставка

var profit: Double {
    get {
        return capital + capital * rate
    }
    set(newProfit) {
        self.capital = newProfit / (1 + rate)
    }
}

}

var myAcc = Account (capital: 1000.0, rate: 0.1)

По этой последней строке выдает ошибку, что - argument passed to call that takes no arguments var myAcc = Account (capital: 1000.0, rate: 0.1)

Я так понимаю, он пишет, что нет аргументов, хотя они вроде как есть.


#2
class Account {
    var capital = 0.0
    var rate = 0.0
    
    var profit: Double {
        get { return capital + capital * rate }
        set { self.capital = newValue / (1 + rate) }
    }
    
    init(capital: Double, rate: Double) {
        self.capital = capital
        self.rate = rate
    }
}

var myAcc = Account(capital: 1000.0, rate: 0.1)

struct Account {
    var capital = 0.0
    var rate = 0.0
    
    var profit: Double {
        get { return capital + capital * rate }
        set { self.capital = newValue / (1 + rate) }
    }
}

var myAcc = Account(capital: 1000.0, rate: 0.1)

#3

с инициализатором каждый сможет)) я ведь как раз и написал, что хочу потренироваться сделать без него. И вроде все правильно указано, переменные инициализированы. Но почему выскакивает ошибка?

Может здесь есть еще что-то, чего я не вижу? Или надо понимать так, что на структуре можно обойтись и без инициализатора, а на классе он обязательно нужен, даже если переменные инициализированы значениями?


#4

Да, я невнимательно прочитал)

Поэлементные инициализаторы структурных типов

Все структуры имеют автоматически генерированный “поэлементный инициализатор”, который вы можете использовать для инициализации свойств новых экземпляров структуры. Начальные значения для свойств нового экземпляра могут быть переданы поэлементному инициализатору по имени:

let vga = Resolution(width: 640, height: 480)

В отличии от структур, классы не получили поэлементного инициализатора исходных значений. Инициализаторы более подробно описаны в Инициализация.

Советую почитать учебник там всё написано)


#5

но ведь есть вариант, когда можно создавать класс и без инициализатора. Вот такой пример из того же учебника:

class Shape {
    var numberOfSides = 0
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

#6

#7

дошло)) если я не создаю инициализатор, то и не могу ему посылать аргументы. В этом случае для изменения значений переменных надо обращаться к ним напрямую.

var myAcc = Account ()
myAcc.capital = 100
myAcc.rate = 0.1