Reputation: 497
I've been trying to create my first convenience initializer. I'm getting this error:
I get the error: Argument 'valueInDollars' must precede argument 'serialNumber'
Here is all of my code, my problem is at the bottom of my code here, but I thought it was useful to show everything.
import UIKit
class Item: NSObject {
var name: String
var valueInDollars: Int
var serialNumber: String?
let dateCreated: NSDate
init(name: String, valueInDollars: Int, serialNumber: String?) {
self.name = name
self.valueInDollars = valueInDollars
self.serialNumber = serialNumber
self.dateCreated = NSDate()
super.init()
}
//create a random item:
convenience init(random: Bool = false) {
if random {
let adjectives = ["Fluffy", "Rusty", "Bluffy"]
let nouns = ["Boon", "Noon", "Toon",]
var idx = arc4random_uniform(UInt32(adjectives.count))
let randomAdjective = adjectives[Int(idx)]
idx = arc4random_uniform(UInt32(nouns.count))
let randomNoun = nouns[Int(idx)]
let randomName = "\(randomAdjective) \(randomNoun)"
let randomValue = Int(arc4random_uniform(100))
let randomSerialNumber = NSUUID().UUIDString.componentsSeparatedByString("-").first!
self.init(name: randomName, serialNumber: randomSerialNumber, valueInDollars: randomValue)
}
else {
self.init(name: "", serialNumber: nil, valueInDollars: 0)
}
}
}
Upvotes: 0
Views: 817
Reputation: 1
The project “Homepwner” contains source code developed with Swift 3.x. This version of Xcode does not support building or migrating Swift 3.x targets.
There are two option for you:
//
// Item.swift
// Homepwner
//
// Created by Arther Smith on 10/17/21.
//
import UIKit
class Item: NSObject {
var name: String
var valueInDollars: Int
var serialNumber: String?
let dateCreated: NSDate
init(name: String, serialNumber: String?, valueInDollars: Int) {
self.name = name
self.valueInDollars = valueInDollars
self.serialNumber = serialNumber
self.dateCreated = NSDate()
super.init()
}
convenience init(random: Bool = false) {
if random {
let adjectives = ["Fluffy", "Rusty", "Shiny"]
let nouns = ["Bear", "Spork", "Mac"]
var idx = arc4random_uniform(UInt32(adjectives.count))
let randomAdjective = adjectives[Int(idx)]
idx = arc4random_uniform(UInt32(nouns.count))
let randomNoun = nouns[Int(idx)]
let randomName = "\(randomAdjective) \(randomNoun)"
let randomValue = Int(arc4random_uniform(100))
let randomSerialNumber = NSUUID().uuidString.components(separatedBy: "-").first!
self.init(name: randomName, serialNumber: randomSerialNumber,valueInDollars: randomValue)
} else {
self.init(name: "", serialNumber: nil, valueInDollars: 0)
}
}
}
Upvotes: 0
Reputation: 500
You should call the init with same order of params you used when you defined the init itself
self.init(name: "", valueInDollars: 0, serialNumber: nil)
Upvotes: 2
Reputation: 497
The solution: I needed to call my init in the right order, so it corresponded with my variables.
Upvotes: 0