클래스의 함수에서 Swift의 다른 함수로 변수를 전달할 수 없습니다.

Matarali

나는 약 일주일 전에이 질문의 일부를 물었고 투표를해서 그것을 해결하기 위해 시간을 보냈다. UIPicker와 함수 사이를 전달하는 첫 번째 부분을 수행하는 방법을 알아 냈습니다. 저는 computeTime () 클래스를 만들었고 그 안에는 배열을 매개 변수로 받아들이는 함수가 있습니다. 그런 다음 내가 계산하는 숫자를 계산합니다. 다음에해야 할 일은 카운트 다운 타이머로 텍스트 레이블을 업데이트 할 수 있도록 update () 함수에 카운트를 전달하는 것입니다. 이 기능을 어디에 두어도 작동하지 않습니다. 클래스 내부에 있으면 선택기 오류가 발생합니다. 클래스 외부에 있으면 카운트 값을 얻을 수 없습니다. 코드 상단에 설정 한 값으로 재정의됩니다. 여기에 모든 코드를 붙여 넣습니다. 누군가 나를 도울 수 있기를 바랍니다.

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, UIPickerViewDelegate,     UIPickerViewDataSource, UITextFieldDelegate {

@IBOutlet weak var dep: UITextField!

@IBOutlet weak var picker: UIPickerView!

@IBOutlet weak var arrivesAt: UIButton!

@IBOutlet weak var departsFrom: UIButton!

@IBOutlet weak var arr: UITextField!

@IBOutlet weak var countDownLabel: UILabel!



var pickerData: [[String]] = [[String]]()

var timer: NSTimer!

var count = 2

var arrayTimes = [""]


override func viewDidLoad() {
    super.viewDidLoad()


    calculateTime().refreshView(["5:45", "6:35", "7:00", "7:30", "7:50", "8:20", "8:40", "9:15", "10:10", "11:10", "12:40", "14:15", "14:50", "15:40", "16:10", "17:10", "17:40", "18:40", "19:25", "20:50"])

    picker.hidden = true

    dep.delegate = self

    dep.resignFirstResponder()
    arr.resignFirstResponder()

    //Picker

    // Connect data:
    self.picker.delegate = self
    self.picker.dataSource = self


    // Input data into the Array:
    pickerData = [["larkspur", "saulsalito", "san francisco", "fisherman's wharf", "giants stadium", "tiburon", "vallejo", "alameda", "harbor bay", "jack london", "south s.f."],
        ["san francisco", "saulsalito", "larkspur", "fisherman's wharf", "giants stadium", "tiburon", "vallejo", "alameda", "harbor bay", "jack london", "south s.f."]]

}



//Mark - Location Delegate Methods



struct MyViewState {
    static var count = 8
}



class calculateTime {

    var timesArray:[String] = []

    var timer: NSTimer!

    var count: Int = 0

    func refreshView(array: [String]) {


        let date = NSDate()
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components([.Hour, .Minute], fromDate: date)
        let hour = components.hour
        let minutes = components.minute
        let currentTime = "\(hour)" + ":" + "\(minutes)"

        self.timesArray = array

        print(timesArray)

        // create a method to convert your time to minutes
        func stringToMinutes(input:String) -> Int {
            let components = input.componentsSeparatedByString(":")
            let hour = Int((components.first ?? "0")) ?? 0
            let minute = Int((components.last ?? "0")) ?? 0
            return hour*60 + minute
        }

        //create an array with the minutes from the original array
        let timesMinutesArray:[Int] = timesArray.map { stringToMinutes($0) }

        let dayMinute = stringToMinutes(currentTime)
        // filter out the times that has already passed
        let filteredTimesArray = timesMinutesArray.filter{$0 > dayMinute }

        // get the first time in your array
        if let firstTime = filteredTimesArray.first {
            // find its position and extract it from the original array
            let nextDeparture = timesArray[timesMinutesArray.indexOf(firstTime)!]   //  "15:40"


            let userCalendar = NSCalendar.currentCalendar()


            let dateMakerFormatter = NSDateFormatter()
            dateMakerFormatter.calendar = userCalendar
            dateMakerFormatter.dateFormat = "yyyy/MM/dd"



            // How many hours and minutes between now and the next ferry

            dateMakerFormatter.dateFormat = "H:mm"
            let startTime = dateMakerFormatter.dateFromString(currentTime)!
            let endTime = dateMakerFormatter.dateFromString(nextDeparture)!
            let hourMinuteComponents: NSCalendarUnit = [.Hour, .Minute]
            let timeDifference = userCalendar.components(
                hourMinuteComponents,
                fromDate: startTime,
                toDate: endTime,
                options: [])

            let difference = (timeDifference.hour*60) + (timeDifference.minute)

            var count = difference

            print(count)  //this returns correctly


           timer = NSTimer.scheduledTimerWithTimeInterval(1, target: ViewController(), selector: "update", userInfo: nil, repeats: true)




        }


    }

}


//Picker

// The number of columns of data
func numberOfComponentsInPickerView(picker: UIPickerView) -> Int {
    return 2
}

// The number of rows of data
func pickerView(picker: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return pickerData[component].count
}

// The data to return for the row and component (column) that's being passed in
func pickerView(picker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return pickerData[component][row]
}


//Show picker wen text field is click in
func textFieldShouldBeginEditing(textfield: UITextField) -> Bool {
    dep.resignFirstResponder()
    arr.resignFirstResponder()
    self.dep.tintColor = UIColor.clearColor()
    self.arr.tintColor = UIColor.clearColor()

    picker.hidden = false

    return false

}

//Make text uneditable
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    return false
}


// Catpure the picker view selection
func pickerView(picker: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    // This method is triggered whenever the user makes a change to the picker selection.
    // The parameter named row and component represents what was selected.
    print("/[component][row]")

    let fromto = pickerData[component][row]


    print(fromto)

    if component == 0 {

        var count = calculateTime().count

        arr.text = "san francisco"

        dep.text = pickerData[component][row]

        calculateTime().refreshView(["5:45", "6:35", "7:00", "7:30", "7:50", "8:20", "8:40", "9:15", "10:10", "11:10", "12:40", "14:15", "14:50", "15:40", "16:10", "17:10", "17:40", "18:40", "19:25", "20:50"])

        print("help")

       self.countDownLabel.text = "\(count)"

        print(count)

    }

    else {

        dep.text = pickerData[component][row]
    }



    picker.hidden = true;
}


func pickerView(picker: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView
{
    var pickerLabel = UILabel()
    pickerLabel.textColor = UIColor( red: CGFloat(41/255.0), green: CGFloat(100/255.0), blue: CGFloat(226/255.0), alpha: CGFloat(1.0) )
    pickerLabel.text = pickerData[component][row]
    // pickerLabel.font = UIFont(name: pickerLabel.font.fontName, size: 15)
    pickerLabel.font = UIFont(name: "Helvetica Neue", size: 20) // In this use your custom font
    pickerLabel.textAlignment = NSTextAlignment.Center
    return pickerLabel
}
func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
    return 36.0
}



func update() {


    if count == 1{
        //self.minutes.text = "minute"
        print("did change")
    }

    if(count > 0)
    {
        //countDownLabel.text = String(count--)

        print(count)
    }

    else if (count == 0)
    {
        timer.invalidate()
        print("ended")
        calculateTime().refreshView(["5:45", "6:35", "7:00", "7:30", "7:50", "8:20", "8:40", "9:15", "10:10", "11:10", "12:40", "14:15", "14:50", "15:40", "16:10", "17:10", "17:40", "18:40", "19:25", "20:50"])

    }



}

}

리암

모든 함수가 파일 내에서 액세스 할 수 있도록 파일 맨 위에 count 변수를 추가해야합니다. 이렇게하면 count 인스턴스가 하나만 있고 전체 파일 내에서 어디에서나 업데이트 할 수 있습니다. 즉 파일 맨 위에 :

var count : Int = calculateTime().count

그런 다음 내 에서처럼 카운트에 액세스 할 수 있습니다.

update()

함수.

별도의 클래스에있는 경우 해당 클래스의 인스턴스를 만들거나 해당 클래스의 인스턴스를 이미 전달해야합니다. 예를 들어, 클래스 A에서 count가 초기화 된 경우 :

public class A {
    var count : Int = 0
}

그런 다음 클래스 B의 변수에 액세스하려면 다음과 같이 할 수 있습니다.

public class B {
    var classA : A = A()

    print("Count : \(classA.count)")
}

이렇게하면 생성 한 A 인스턴스의 개수에 액세스 할 수 있습니다. 또는 클래스 B의 인스턴스를 만들 때 초기화 할 때 클래스 A의 적절한 인스턴스를 전달할 수 있습니다. 예를 들면

public class C {
    var a : A = A()
    var b : B = B(class : a)
}

public class B {
    var count : Int

    init(class : A = A()) {
        count = class.count
    }
}

또한 OOP에서는 개수를 노출하고 개수를 비공개로 설정하는 대신 getter와 setter를 사용하고 싶을 것입니다.

public class A {
    private var _count = 0

    var count : Int {
        get {
            return _count
        }

        set {
            if newValue != _count {
                _count = newValue
            }
        }
    }
}

public class B {
    var classA : A = A()

    classA.count = 2 // Would set the count of class A, for the particular instance you have created as 2
}

이것은 또한 변수에 대한 액세스를 제공합니다. 또한 이것이 도움이되지 않는 경우 델리게이트 및 프로토콜을 살펴보고 이러한 방식으로 변수를 전달할 수도 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Objective c의 한 클래스에서 다른 클래스로 변수 값을 전달할 수 없습니다.

분류에서Dev

다른 함수의 함수에서 변수를 사용할 수 없습니다.

분류에서Dev

클래스의 한 함수에서 다른 함수로 동적 값 전달

분류에서Dev

Powershell의 변수를 함수에서 스크립트로 전달할 수 없습니다.

분류에서Dev

한 클래스의 함수를 다른 클래스의 다른 함수의 인수로 전달하는 방법

분류에서Dev

링크의 매개 변수를 함수에 전달할 수 없습니다.

분류에서Dev

Swift에서 다른 함수의 매개 변수로 함수를 호출 할 수 있습니까?

분류에서Dev

PHP에서 다른 함수의 인수로 함수 전달

분류에서Dev

Reactjs는 변수를 다른 클래스에서 함수로 전달합니다.

분류에서Dev

다른 클래스의 클래스로 함수를 호출 할 수 없습니다.

분류에서Dev

멤버 함수 주소를 다른 클래스의 함수로 전달

분류에서Dev

Swift에서 한 함수에서 다른 함수로 가변 개수의 인수 전달

분류에서Dev

멤버 함수의 클래스 변수에 액세스 할 수 없습니다.

분류에서Dev

다른 클래스의 함수에서 자바 스크립트를 호출 할 수 없습니다.

분류에서Dev

하나의 JS 함수에서 다른 함수로 변수 전달

분류에서Dev

Qt에서 GLWidget 클래스의 참조를 전달할 수 없습니다.

분류에서Dev

파생 클래스가 다른 서명의 함수로 가상 함수를 재정의 할 수 있습니까?

분류에서Dev

onClick 함수에서 변수를 인수로 전달할 수 없습니다.

분류에서Dev

한 함수에서 다른 함수로 변수를 전달할 수 없습니다.

분류에서Dev

Swift의 Singleton은 다른 클래스에서 액세스 할 수 없습니다.

분류에서Dev

select의 onChange 함수에서 블레이드 변수를 전달할 수 없습니다.

분류에서Dev

함수의 변수를 셸 스크립트의 기본 코드로 전달할 수 없습니다.

분류에서Dev

같은 클래스의 클로저에서 변수를 변경할 수 없습니다. [swift 3.0]

분류에서Dev

프레임을 함수로 전달할 때 dplyr의 그룹별로 변수를 요약 할 수 없습니다.

분류에서Dev

변수가 정의되지 않은 함수에 매개 변수를 전달할 수 없습니다. Angular 11

분류에서Dev

jsp의 Alert 함수에 값을 전달할 수 없습니다.

분류에서Dev

Redux React : 다른 클래스의 함수 내에서 'this'에 액세스 할 수 없습니다.

분류에서Dev

C ++에서 클래스의 변수를 수정할 수 없습니다.

분류에서Dev

다른 함수에서 인덱스 함수의 뷰로 변수를 전달하는 방법

Related 관련 기사

  1. 1

    Objective c의 한 클래스에서 다른 클래스로 변수 값을 전달할 수 없습니다.

  2. 2

    다른 함수의 함수에서 변수를 사용할 수 없습니다.

  3. 3

    클래스의 한 함수에서 다른 함수로 동적 값 전달

  4. 4

    Powershell의 변수를 함수에서 스크립트로 전달할 수 없습니다.

  5. 5

    한 클래스의 함수를 다른 클래스의 다른 함수의 인수로 전달하는 방법

  6. 6

    링크의 매개 변수를 함수에 전달할 수 없습니다.

  7. 7

    Swift에서 다른 함수의 매개 변수로 함수를 호출 할 수 있습니까?

  8. 8

    PHP에서 다른 함수의 인수로 함수 전달

  9. 9

    Reactjs는 변수를 다른 클래스에서 함수로 전달합니다.

  10. 10

    다른 클래스의 클래스로 함수를 호출 할 수 없습니다.

  11. 11

    멤버 함수 주소를 다른 클래스의 함수로 전달

  12. 12

    Swift에서 한 함수에서 다른 함수로 가변 개수의 인수 전달

  13. 13

    멤버 함수의 클래스 변수에 액세스 할 수 없습니다.

  14. 14

    다른 클래스의 함수에서 자바 스크립트를 호출 할 수 없습니다.

  15. 15

    하나의 JS 함수에서 다른 함수로 변수 전달

  16. 16

    Qt에서 GLWidget 클래스의 참조를 전달할 수 없습니다.

  17. 17

    파생 클래스가 다른 서명의 함수로 가상 함수를 재정의 할 수 있습니까?

  18. 18

    onClick 함수에서 변수를 인수로 전달할 수 없습니다.

  19. 19

    한 함수에서 다른 함수로 변수를 전달할 수 없습니다.

  20. 20

    Swift의 Singleton은 다른 클래스에서 액세스 할 수 없습니다.

  21. 21

    select의 onChange 함수에서 블레이드 변수를 전달할 수 없습니다.

  22. 22

    함수의 변수를 셸 스크립트의 기본 코드로 전달할 수 없습니다.

  23. 23

    같은 클래스의 클로저에서 변수를 변경할 수 없습니다. [swift 3.0]

  24. 24

    프레임을 함수로 전달할 때 dplyr의 그룹별로 변수를 요약 할 수 없습니다.

  25. 25

    변수가 정의되지 않은 함수에 매개 변수를 전달할 수 없습니다. Angular 11

  26. 26

    jsp의 Alert 함수에 값을 전달할 수 없습니다.

  27. 27

    Redux React : 다른 클래스의 함수 내에서 'this'에 액세스 할 수 없습니다.

  28. 28

    C ++에서 클래스의 변수를 수정할 수 없습니다.

  29. 29

    다른 함수에서 인덱스 함수의 뷰로 변수를 전달하는 방법

뜨겁다태그

보관