2017-09-25 6 views
0

두 개의 * .swift 파일이 있습니다. 하나는 슬라이더가있는 ViewController입니다. 두 번째 줄은 선을 그리는 '서랍'클래스입니다.prepareForSegue가없는 두 개의 * .swift 파일간에 데이터 전달

목표는 슬라이더 값에서 변수를 얻은 다음 (2) 선을 그리기 위해 '서랍'으로 전달한 다음 (3) 슬라이더에 새 값을 전달하여 다시 그리기로 전달할 수 있음을 알립니다. 선.

위임자를 사용하여 데이터를 전달해야합니까, 아니면 너무 복잡할까요? 불행히도 prepareForSeague없이 대리인 메서드를 찾을 수 없습니다.

코드는 다음과 같습니다.

의 ViewController :

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var label: UILabel! 

    @IBAction func slider(_ sender: UISlider) { 
     label.text = String (sender.value) 
    } 

drawer.swift :

import UIKit 

// var position = 300 - Here I want to get a variable from the ViewController 

class drawer: UIView { 

    override func draw(_ rect: CGRect) { 
     let context = UIGraphicsGetCurrentContext() 
     context?.setLineWidth(2.0) 
     let colorSpace = CGColorSpaceCreateDeviceRGB() 
     let components: [CGFloat] = [0.0, 0.0, 1.0, 1.0] 
     let color = CGColor(colorSpace: colorSpace, components: components) 
     context?.setStrokeColor(color!) 
     context?.move(to: CGPoint(x: 30, y: 30)) 
     context?.addLine(to: CGPoint(x: position, y: 400)) 
     context?.strokePath() 
    } 
} 
+0

https://stackoverflow.com/a/41560949/2303865 –

+0

로 시작하는 모든 클래스의 이름을 지정합니다. 빠른? –

+0

슬라이더의 값이 변경되면 선을 다시 그리기 위해 서랍으로 보내야합니다. – user3820453

답변

0

당신은 글로벌 수준에서 변수를 선언 할 수 있습니다.

var position = 0.0 
class drawer: UIView {} 

여기에 값을 바꿉니다.

@IBAction func slider(_ sender: UISlider) { 
    label.text = String(sender.value) 
    position = sender.value 
} 

제안 : 이름 지정 규칙에 대한 : 서랍에서 값을 전달하는 위치에서 대문자

+0

심지어 작동하더라도 전역 수준에서 변수를 선언하면 안됩니다. 위에 게시 한 링크를 확인하여 앱의 전체 공간을 오염시키지 않고 동일한 결과를 얻을 수있는 방법을 보여주는 설명을 확인하십시오. –

+0

맞지만 코드에서'drawer.swift' 인스턴스를 보지 못했습니다. 코멘트에 그에게 물어 보라! –

+0

대문자로 시작하는 모든 수업의 이름을 지키는 것은 신속한 규칙입니다. –