私は簡単な登録ストーリーボードを使ってユーザーに自分の名前などを尋ねています。入力されたデータをUITextfieldとして収集し、すべてを最終的なviewcontrollerに渡して、それをサーバに送ります。 JSONはテストデータが追加された状態で正常に動作しています。ViewControllerからViewControllerにNSDictとして変数を渡す
BaseViewController
struct NewUserStruct {
var firstName: String
var lastName: String
}
これはコンパイルが、私はプリント(NEWUSER)についてはnilの値を取得し、それを印刷しVC
let firstNameReg = inputFirstName.text
let lastNameReg = inputLastName.text
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destVC = segue.destination as? RegistrationUpdateViewController {
let newuser = NewUserStruct(firstName: firstNameReg! , lastName: lastNameReg!)
print(newuser)
destVC.newuser = newuser
} }
と受信VC
var newuser: NewUserStruct?
func createUser(){
guard let user = self.newuser else {
print("User is not set")
return
}
let service = "registration"
let parameters: [String: Any] = ["firstName": user.firstName,
"lastName": user.lastName,
"email": "[email protected]",
"password": "12345678",
"region": "EU",
"bundleId": Bundle.main.bundleIdentifier!,
"appVersion": Bundle.main.infoDictionary?["CFBundleVersion"] as! String]
を送信ガード "ユーザーが設定されていません"
これは、あなたが渡しているデータの適切な定義を持っているように、私は構造体を使用することになり、私の全体のVC
import Foundation
import UIKit
class RegistrationNameViewController: BaseViewController {
@IBOutlet var inputFirstName: UITextField!
@IBOutlet var inputLastName: UITextField!
override func setup() {
}
override func navbarTitle() -> String {
return "Name"
}
override func leftNavbarButtonType() -> NavbarButtonType {
return NavbarButtonType.eNavbarButtonTypeBack
}
override func rightNavbarButtonType() -> NavbarButtonType {
return NavbarButtonType.eNavbarButtonTypeNext
}
override func navbarViewNextPressed(_ navbarView: NavbarView) {
let firstNameReg = inputFirstName.text
let lastNameReg = inputLastName.text
print(inputFirstName.text!,inputLastName.text!)
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destVC = segue.destination as? RegistrationUpdateViewController {
print(destVC)
let newuser = NewUserStruct(firstName: firstNameReg! , lastName: lastNameReg!)
print(newuser)
destVC.newuser = newuser
} }
self.performSegue(withIdentifier: "NameToEmail", sender: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
あなたはスウィフトを使用しているのでNSDictionaryではなく、Dictionaryを使用する必要があります。受け取る辞書は 'Name2Array'ではなく' NameVars'であるようです。変数には大文字で名前を付けるべきではなく、構造体を使用して辞書ではなくデータを渡すべきです – Paulw11
最終的には、最終的なviewcontrollerに変数が追加されるように名前を変更しました。 NSDictionary = self.receiveItemとし、let NameVars:NSDictionary = self.receiveItem また、私はキャップを変更します。辞書ではなくStructsを使用する理由はありますか?私はその違いを完全に理解していません。私は既存のコードを使用しています。その理由は、その辞書ではなくNSDictionaryです。ありがとう! – Thegasman2000
辞書の問題は、それが不正確であることです。あなたはキーの値を知る必要があり、単純なタイプミスをすると物事が壊れるでしょう。もしあなたが構造体を使うならば、コンパイラはオートコンプリートを提供し、属性が何であるかをより定義します。 NSDictionaryは素早い辞書にブリッジされます – Paulw11