Возникающая проблема при передаче данных между классами

Я пытаюсь передать данные из класса данных в класс входа (оба файла разделены.), но он выбрасывает 2 ошибки из класса «Login», поскольку он не может получить данные

Ниже приведены ошибки, показанные в Login.быстрый :

Ошибка 1

Элемент экземпляра ‘dataObj’ нельзя использовать для типа ‘Login’

Ошибка 2

Ожидаемая декларация

Вход.SWIFT-код

import Foundation
import Alamofire
import SwiftyJSON
class Login {let dataObj = Data(userName: "username", passWord: "password")

let endPoint = dataObj.todoEndPoint
let parameters = [
    "username": dataObj.userName,
    "password": dataObj.passWord
]

Alamofire.request(.POST, endPoint, parameters:parameters)
.responseJSON { response in
print(response.request)
print(response.response)
print(response.result)
if let JSON = response.result.value {
print("Did receive JSON data: (JSON)")
}
else {
print("JSON data is nil.")
}
}   
}

Данные.SWIFT-код

import Foundation
import Alamofire
import SwiftyJSON

class Data {

var userName:String!
var passWord:String!
let todoEndpoint: String = "http://jsonplaceholder.typicode.com/todos/1"

init(userName : String, passWord : String) {
    self.userName = userName
    self.passWord = passWord
}
}

Скриншот ошибок

Вход.swift ошибки

2 ответа

  1. В соответствии с вашей Dataреализацией класса вы должны использовать его как :

    class Login {
    let dataObj = Data(userName : "username", passWord : "password")
    let endPoint = dataObj.todoEndPoint
    let parameters = [
                   "username": dataObj.userName,
                   "password": dataObj.passWord
        ]
    
        Alamofire.request(.POST, endPoint, parameters:parameters)
            .responseJSON { response in
                print(response.request)
                print(response.response)
                print(response.result)
                if let JSON = response.result.value {
                    print("Did receive JSON data: \(JSON)")
                }
                else {
                    print("JSON data is nil.")
                }
    
        }
    
        }
    

    Если вы хотите получить статические данные отData, то используйте singleton/shared instance.

  2. Вам просто нужно изменить свойство экземпляра данных на свойство класса с помощью статического

    class Data {
    
    static var userName:String!
    static var passWord:String! 
    static let todoEndpoint: String = "http://jsonplaceholder.typicode.com/todos/1"
    
    }
    

    и установите прямые значения В userNameи passWord.

    в from login set value

    Data.userName = "yourusername" 
    Data.passWord = "password"
    

    2.
    также можно создать объект данных

    class Data {
    
     var userName:String!
     var passWord:String!
     let todoEndpoint: String = "http://jsonplaceholder.typicode.com/todos/1"
    
    init(userName : String, passWord : String) {
    
     self.userName = userName 
     self.passWord = passWord
    }
    

    и в классе login

    class Login {
    static let dataObj = Data(userName: "usename", passWord: "password")
    
    lazy var endPoint = Login.dataObj.todoEndpoint
    
    let parameters = [
               "username": dataObj.userName,
               "password": dataObj.passWord
    ]
    
    
    func getRequest() {
    
    Alamofire.request(.POST, endPoint, parameters:parameters)
        .responseJSON { response in
            print(response.request)
            print(response.response)
            print(response.result)
            if let JSON = response.result.value {
                print("Did receive JSON data: \(JSON)")
            }
            else {
                print("JSON data is nil.")
            }
    }
    }
    
    }
    

    УСОВЕРШЕНСТВОВАННЫЙ

    Я думаю, что вы должны создать одноэлементный объект, чтобы получить значения пользователей везде.

    class Data {
    
     static let sharedInstance = Data()
     static let todoEndpoint: String = "http://jsonplaceholder.typicode.com/todos/1"
     var userName: String?
     var passWord: String?
    
     // for prevent from creating this class object
     private init() { }
    
     }
    

    И в классе Login.

    class Login {
    
     init(userName: String, passWord: String) {
     Data.sharedInstance.userName = userName
     Data.sharedInstance.passWord = passWord
      }
    
     /// call this method to login
     func getRequest() {
     print(Data.sharedInstance.userName)
     print(Data.sharedInstance.passWord) 
    
     Alamofire.request(.POST, Data.endPoint, parameters: ["userName": Data.sharedInstance.userName, "passWord": Data.sharedInstance.passWord])
    .responseJSON { response in
    print(response.request)
    print(response.response)
    print(response.result)
    if let JSON = response.result.value {
    print("Did receive JSON data: \(JSON)")
    }
    else {
    print("JSON data is nil.")
    }
    
    }
    
    }
    }
    

    И из некоторого другого класса создайте экземпляр входа в систему и передайте userNameи Passwordзначения оттуда и вызовите метод getRequest, используя объект входа в систему.