2015-07-02 2 views
2

Любые предложения о том, что я делаю неправильно? При инициализации объекта у меня не может быть Array из другого класса в качестве параметра. Вот моя конкретная ситуация:Невозможно вызвать инициализатор для типа: с помощью списка аргументов типа:

Я пытаюсь создать приложение для тренировки. Приложение содержит несколько различных тренировок. Каждая тренировка имеет собственный уникальный набор упражнений.

У меня есть код для WorkoutObj (Эта структура создает тренировки и нуждается в NSArray workoutDrillSet)

import UIKit 

struct WorkoutObj { 

var workoutType: NSString 
var workoutNumber: Int 
var workoutDesc: NSString 
var workoutDuration: Int 
var workoutDrillSet: NSArray 

init(type: String, number: Int, duration: Int, desc: String, drillSet: NSArray) 
{ 
    workoutType = type 
    workoutNumber = number 
    workoutDuration = duration 
    workoutDesc = desc 
    workoutDrillSet = drillSet 
} 

} 

Вот мои DrillObjects (Эта структура представляет собой объект, массив бур будет состоять из - в других слова, массив бур будет состоять из DrillObject1, DrillObject2, DrillObject3 и т.д.)

import UIKit 

struct DrillObject { 

var drillDesc: NSString 
var drillDurationMin: Int 
var drillDurationSec: Int 
var drillHRZone: Int 
var drillEffort: Int 
var drillCadence: Int 

init(M: Int, S: Int, hRZone: Int, effort: Int, cadence: Int, name: NSString) 
{ 
    drillDesc = name 
    drillDurationMin = M 
    drillDurationSec = S 
    drillHRZone = hRZone 
    drillEffort = effort 
    drillCadence = cadence 
} 

} 

Мой следующий класс мой EDrills класса. Этот класс помещает каждый DrillObject в массив. Созданный массив вызывается, arrayE1Drills

import UIKit 

class EDrills: NSObject { 

let dE1: DrillObject 
let dE2: DrillObject 
let dE3: DrillObject 
let dE4: DrillObject 
let dE5: DrillObject 
let dE6: DrillObject 
let dE7: DrillObject 
let dE8: DrillObject 
let dE9: DrillObject 
let dE10: DrillObject 
let dE11: DrillObject 
let dE12: DrillObject 
let dE13: DrillObject 
let dE14: DrillObject 

var arrayE1Drills : [DrillObject] 


override init() 
{ 
    dE1 = DrillObject (M: 5, S: 0, hRZone: 2, effort: 8, cadence: 95, name: "W/U Pedal Easy @ 90 RPM") 

    dE2 = DrillObject (M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Stand") 
    dE3 = DrillObject (M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Sit") 

    dE4 = DrillObject (M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Stand") 
    dE5 = DrillObject (M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Sit") 

    dE6 = DrillObject (M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Stand") 
    dE7 = DrillObject (M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Sit") 

    dE8 = DrillObject (M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Stand") 
    dE9 = DrillObject (M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Sit") 

    dE10 = DrillObject(M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Stand") 
    dE11 = DrillObject(M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Sit") 

    dE12 = DrillObject(M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Seated 80% left leg") 
    dE13 = DrillObject(M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Seated 80% right leg") 

    dE14 = DrillObject(M: 0, S: 30, hRZone: 2, effort: 10, cadence: 95, name: "W/U Seated 80% left leg") 


    arrayE1Drills = 
    [dE1, 
    dE2, 
    dE3, 
    dE4, 
    dE5, 
    dE6, 
    dE7, 
    dE8, 
    dE9, 
    dE10, 
    dE11, 
    dE12, 
    dE13, 
    dE14] 


} 

} 

Наконец, у меня есть класс EWorkouts. Это класс, который проводит несколько тренировок. В e1 workoutObject необходимо удерживать arrayE1Drills класса EDrills.

import UIKit 


class EWorkouts { 

var e1: WorkoutObj 
var e2: WorkoutObj 
var e3: WorkoutObj 
var e4: WorkoutObj 
var e5: WorkoutObj 

var arrayEAll : [WorkoutObj] 
var arrayE0to45 : [WorkoutObj] 
var arrayE30to45: [WorkoutObj] 
var arrayE45to60: [WorkoutObj] 
var arrayEGreater45: [WorkoutObj] 
var arrayE0to60: [WorkoutObj] 
var arrayEGreater60: [WorkoutObj] 

var myEDrillsClass : EDrills 


init() 
{ 
    myEDrillsClass = EDrills() 
    let myArray = myEDrillsClass.arrayE1Drills 


    e1 = WorkoutObj(type: "E", number: 1, duration: 63, desc: "Rolling Hilly Course", drillSet: myArray) 

} 

При попытке загрузить arrayE1Drills в тренировки, я получаю сообщение об ошибке: Cannot invoke initializer for type "WorkoutObjc" with an argument list of type (type: String, number: Int, duration: Int, desc: String, drillSet: [DrillObject])

ответ

1

Есть тип не соответствует

var workoutType: NSString ->init : String

var workoutDesc: NSString ->init : String

и более поздние версии NSArray < ->Array

Поскольку Swift 1.2 основные типы Фундаментные не неявно отлиты в Swift коллегами

я рекомендую использовать только Swift типы