2015-03-25 2 views
0

Я пытаюсь вызвать метод класса без создания нового экземпляра. Я уверен, что вызов метода верен. Я создал класс CalculateWeek. Этот класс имеет несколько методов, которые выполняют операции с датами. Вот мой CalculateWeek класс `Вызов метода из пользовательского класса без создания нового экземпляра, IntegerLiterallConvertible error с аргументом Int

import Foundation 
    class CalculateWeek { 
    let calendar = NSCalendar.currentCalendar() 
    var date = NSDate() 

    func weekStart(weekDaySelected:Int)->NSDate?{ 
     //Get Current Weekday 
     let currentWeekday = calendar.components(.CalendarUnitWeekday, fromDate:date) 
     var weekDay = [currentWeekday.weekday] //date component 
     println("Current weekday is \(weekDay[0])") // 

     var daysToSubtract = 1 
     let dateComponents = NSDateComponents() 
     dateComponents.day = daysToSubtract 

     let startDate = calendar.dateByAddingComponents(dateComponents, toDate: todayStart!, options: nil) 
     return startDate 
    } 

Тогда я пытаюсь вызвать этот метод из моего View Controller Класс:

var tempWeekEnd = CalculateWeek.weekStart(1) 

И я получаю ошибку«Тип CalculateWeek»не соответствует протоколу„IntegerLiteralConvertible“ Я знаю, что код верен, потому что, если я скопирую и вставляю метод weekStart в класс View Controller, он отлично работает. Он должен иметь какое-то отношение к тому, как я вызываю метод, но я не могу понять это. метод my argument type is Int, и я отправляю Int.

+0

Вы можете сделать метод методом типа, поставив слово «класс» перед func и перемещая календарь и дату внутри метода. Это может сработать, но это зависит от того, что такое TodayStart. Откуда это? – rdelmar

ответ

0

Почему бы не создать объект один раз (возможно, частный атрибут) & используя его после? Без создания какого-либо экземпляра невозможно, var tempWeekEnd = CalculateWeek().weekStart(1) работал, поэтому вам нужно создать один экземпляр.

private var cw = CalculateWeek() 
... 
var tempWeekEnd = cw.weekStart(1) 

Надеется, что это помогает

1

Я вижу несколько проблем в коде:

  1. weekStart() метод не является методом класса, поэтому он не может быть назван так, как вы хотите позвонить. Вам нужен экземпляр, чтобы позвонить ему.

  2. Дата, в которую вы манипулируете, является членом экземпляра, который не будет доступен из weekStart(), если вы сделаете его методом класса.

Я советую либо вызывать метод weekStart() для созданного экземпляра CalculateWeek, либо сделать его методом класса для вызова так, как вы хотите.

В отношении соответствующей ноты я прошу вас проверить мою структуру для обработки даты here. У вас есть довольно много оберток, которые вы можете захотеть.

Смежные вопросы