2017-04-23 3 views
1

아주 기본적인 질문 덕분에 UILabel.text을 변경 할 수 있도록 미래에 변경/firstName.text = "Joe Bloggs"를 명시 적으로 선언하는 것보다 더 많은 이름/레이블을 추가하십시오초급 스위프트 - 문제 객체 (jName)에 저장된 속성을 참조하여 UILabel의 텍스트를 변경하려고 객체에 저장된 속성에 도움</p> <p>에 대한

jName의 저장된 속성으로 텍스트를 변경할 수없는 이유를 이해하지 못합니까? 나는 속성을 초기화하려고했지만 이것 역시 도움이되지 않았습니다. 누구든지 이것을 구조화하는 가장 좋은 방법을 알고 있습니까?

class ViewController: UIViewController { 


    @IBOutlet var firstName: UILabel! 
    @IBOutlet var thirdName: UILabel! 

    struct jName { 

     var fName: String = "Joe" 
     var lName: String = "Blogs" 

     init(fName: String, lName: String) { 
      self.fName = fName 
      self.lName = lName 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     assignLabels() 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func assignLabels() { 

     firstName.text = jName.fName 
     thirdName.text = jName.lName 

    } 
} 

답변

0

첫째, 이미 내장 생성자가있다, 그래서 당신이 그것에 사용자 지정 코드를 퍼 팅하지 않는 경우 코드에서이 부분은 불필요 :

init(fName: String, lName: String) { 
    self.fName = fName 
    self.lName = lName 
} 

구조체를 초기화하지 않았고 속성을 직접 액세스하려고하기 때문에 텍스트를 변경할 수 없습니다. 속성을 사용하기 전에 당신은 구조체를 초기화해야합니다

func assignLabels() { 
    let jNameStruct = jName(fName: "Joe", lName: "Blogs") 
    firstName.text = jNameStruct.fName 
    thirdName.text = jNameStruct.lName 

} 

다른 옵션은 변수에 static 수정을 사용하는 것입니다, 그래서 당신은 직접 저장 속성에 액세스 할 수있을 것입니다 :

struct jName { 

    static var fName: String = "Joe" 
    static var lName: String = "Blogs" 

    init(fName: String, lName: String) { 
     self.fName = fName 
     self.lName = lName 
    } 
} 
0

힌트를위한 몇 가지 코드를 넣고 있습니다. 아이디어를 얻으시기 바랍니다. 당신이 구조체를 사용하고 있기 때문에

모든
struct jName { 

var fName: String = "Joe" 
var lName: String = "Blogs" 

init(fName: String, lName: String) { 
    self.fName = fName 
    self.lName = lName 
} 
} 

let myname = jName.init(fName: "sanjeet", lName: "kumar") 
let mystrng = myname.fName 
print(mystrng) 
0

구조체를 작성 했으므로 해당 구조체에 액세스하기 전에 구조체의 새 인스턴스를 만들어야합니다.

그래서 수업 시간에 줄을 넣어 :

var names = jName(fName: "Joe", lName: "Blogs") 

위의 라인은 jName의 새로운 인스턴스를 생성합니다. 이제 속성에 액세스 변수 names을 사용할 수 있습니다 : 당신이 당신의 질문을 모호하게하는 방식에서

func assignLabels() { 

    firstName.text = names.fName 
    thirdName.text = names.lName 

} 

을, 나는 당신이 정말 원하는 것은 레이블의 텍스트가 자동으로 변경한다는 것입니다 생각하면 names.fNamenames.lName 변화의 값. 이렇게하려면 속성 관찰자를 속성에 추가해야하며 속성 관찰자에서 레이블 텍스트를 설정해야합니다.

struct jName { 

    var fName: String = "Joe" { 
     willSet { firstName.text = newValue } 
    } 
    var lName: String = "Blogs" { 
     willSet { thirdName.text = newValue } 
    } 

    init(fName: String, lName: String) { 
     self.fName = fName 
     self.lName = lName 
    } 
}