2017-10-06 3 views
0

구조체에 데이터를 추가하는 데 사용하는 3 개의 textifled가 있습니다. 내가 추가 한 것을 어떻게 인쇄 할 수 있습니까? 지금은 오류 메시지가 나타납니다.추가 된 구조체 인쇄 (swift4)

import UIKit 

class ViewController: UIViewController { 
    @IBOutlet var c: UITextField! 
    @IBOutlet var a: UITextField! 
    @IBOutlet var b: UITextField! 
    var contacts: [Person] = [] 

    @IBAction func press(_ sender: Any) { 
     contacts.append(Person(name: a.text!, surname: b.text! , phone: Int(c.text!)!)) 
     print(ViewController.Person) 
    } 

    struct Person { 
     var name: String 
     var surname: String 
     var phone: Int 
    } 
} 

답변

0

코드를 수정 했으므로 원하는 결과를 얻을 수 있습니다.

import UIKit 

class ViewController: UIViewController { 
@IBOutlet var c: UITextField! 
@IBOutlet var a: UITextField! 
@IBOutlet var b: UITextField! 
var contacts: [Person] = [] 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 


} 
@IBAction func press(_ sender: Any) { 
    contacts.append(Person(name: a.text!, surname: b.text! , phone: Int(c.text!)!)) 
    print(self.contacts.description) 
} 

struct Person { 
    var name: String 
    var surname: String 
    var phone: Int 

}} 

방금 ​​인쇄본을 변경했습니다. 연락처 배열은 컨트롤러 자체를 볼 수 있으므로 직접 자기가 사용할 수 있고 연락처의 업데이트 값 인쇄에 대한 기능 설명을 사용할 수 있습니다.

+0

사용자가 임의의 숫자를 입력하거나 정수가 아닌 텍스트를 붙여 넣으면 응용 프로그램이 중단됩니다. 또한 전화 번호 앞에 +와 0을 붙이는 것이 일반적입니다. OP는 정수가 아닌 문자열로 저장해야합니다. –

+0

@LeoDabus 덧글에 너무 많으면 전화 번호에 숫자 만 포함되어 있어도 여전히 'Int'가 아니어야합니다. 전화 번호는 계산되지 않습니다. 전화 번호는 단지 레이블 일뿐입니다. – rmaddy

0

print(ViewController.Person)

사용하십시오 잘못된 것입니다 : 당신은 Person의 실제 struct를 인쇄 할

print(contacts.last) 
2

. 특정 인스턴스를 인쇄하려고합니다. 당신은 하나 개의 인스턴스를 인쇄하려면

print("contacts: \(contacts)") 

, 나는 코드가 조금 분할 제안 :

당신은 전체 배열을 인쇄 할 수 있습니다

@IBAction func press(_ sender: Any) { 
    let person = Person(name: a.text!, surname: b.text! , phone: Int(c.text!)!) 
    print(person) 
    contacts.append(person) 
} 

을하지만 인쇄 유용하게 description 속성을 구조체에 추가하고 struct가 CustomStringConvertible을 준수하도록해야합니다.

struct Person: CustomStringConvertible { 
    var name: String 
    var surname: String 
    var phone: Int 

    var description: String { 
     return "Person name: \(name), surname: \(surname), phone: \(phone)" 
    } 
} 

안전하게 옵션을 처리하는 방법도 배워야합니다. ! 연산자는 "nil이 아닌 경우 크래시"를 의미합니다. 사용자가 전화 필드에 "Hello"를 입력하면 코드가 충돌합니다.

@IBAction func press(_ sender: Any) { 
    if let name = a.text, let surname = b.text, let phoneStr = c.text, let phone = Int(phoneStr) { 
     let person = Person(name: name, surname: surname, phone: phone) 
     print(person) 
     contacts.append(person) 
    } 
} 

또한 전화 번호는 숫자 값이 아님을 고려하십시오. 전화 번호를 저장하려면 String을 사용하고 Int이 아닌을 사용하십시오.