2016-03-20 8 views
0

にプロパティとして配列を持つカスタムオブジェクトの初期化:次のようになり、従業員と呼ばれる作成したクラスがありました迅速

ビューで
class Employees: NSObject { 

    var name: String 
    var employeeRoles: [String] 
    var departmentID: Int 

    init(name:String, employeeRoles:[String], departmentID:Int){ 
     self.name = name 
     self.employeeRoles = employeeRoles 
     self.departmentID = departmentID 
    } 
} 

を、あなたは従業員を入力できるテキストフィールドがあります役割はもちろん文字列です。私は、それぞれのフィールドにどのような情報が入力されたかを試し、新しいEmployeesオブジェクトを作成し、それをデバッグコンソールに出力しました。しかし、私たちが視界に入った文字列を取るしようとすると次の行には、プログラムがクラッシュし、理由として任意の更なる情報を提供していません:

let newEmployee = Employees(name: (employeeFirstNameInputField.text! + " " + (employeeLastNameInputField.text)!), employeeRoles: (employeeListingInputField.text as? [String])!, departmentID: 0) 

    print(newEmployee.name) 

私が間違ってここに行っていますか?

答えて

0

テキストフィールドがweak var textField: UITextField!と宣言されていると仮定すると、このように新しい従業員を作成します。

let name = employeeFirstNameInputField.text + " " + employeeLastNameInputField.text 
let listings = employeeListingInputField.text.componentsSeparatedByString("\n") 
let newEmployee = Employees(name: name, employeeRoles: listings, departmentID: 0) 

リスティングテキストフィールドに返された文字列を文字列の配列に分割する必要があります。新しい配列要素はそれぞれ、改行で区切られます。これを行う方法は他にもあります(splitなど)。

0

ダウンストリームを介してストリング(employeeListingInputField.text)をストリングの配列に変換できないため、as? [String]は失敗し、nilを返します。 この値を!で強制的にアンラップすると、典型的な "予期せぬ発見のnil ..."例外が発生します。

これは "これは無条件ではないと約束しています"

1行のコードですべてを実行しようとしているため、ここにはたくさんあります。正しい行は、この1行を複数の行に展開することですたとえば、名前が空白の場合など、適切なメッセージを表示することもできます。

ロールを持たないと仮定すると、0 len空の文字列である1要素の配列ではなく、空の配列を使用します。ロールを持たない場合は、以下のコードがエラーを発行するように変更されます。 guardステートメントを使用して検証を実装することもできます。

var roles=[String]() 
if employeeListingInputField.text != nil && employeeListingInputField.text!.length > 0 { 
    roles.append(employeeListingInputField.text) 
} 

今後の参考のために、あなたの初期化子の呼び出し

で使用roles、文字列の1つの要素の配列に単一の文字列を変換する方法はただ[myString]を言うことです。

関連する問題