加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift命令行项目SwiftBank学习

发布时间:2020-12-14 06:56:14 所属栏目:百科 来源:网络整理
导读:新建名为SwiftBank的OSX Comand line 工程,会自动生成main.swift,再新建(? +N)两个文件User.swift和Utils.swift 内容分别为: main.swift //// main.swift// SwiftBank//// Created by cyper on 6/1/16.// Copyright ? 2016 Moaz Tech. All rights reserved./



新建名为SwiftBank的OSX Comand line 工程,会自动生成main.swift,再新建(? +N)两个文件User.swift和Utils.swift
内容分别为:

main.swift

//
//  main.swift
//  SwiftBank
//
//  Created by cyper on 6/1/16.
//  Copyright ? 2016 Moaz Tech. All rights reserved.
//
var users: [User] = [
    User(username: "one",password: "123",name: "Cyper")!,User(username: "two",name: "Green")!,User(username: "three",name: "Kitten")!
]

var currentUser: User?

func login(){
    Utils.clearScree()
    print(">>>>>> LOGIN")
    let username = Utils.readInput("Username: ")
    let password = Utils.readInput("Password: ")
    
    var foundUser = false
    for user in users {
        if user.username == username && user.password == password {
            foundUser = true
            currentUser = user
        }
    }
    if !foundUser {
        print("Invalid credentials")
        return
    }
    
    print("Access granted!")
    Utils.pause()
    
    enterUserMenu()
}

func enterUserMenu(){
    while true {
        Utils.clearScree()
        
        print(">>>>>>>> USER MENU")
        print("1. View Account")
        print("2. Deposit Money")
        print("3. Withdraw Money")
        print("0. Sign out")
        
        let response_str = Utils.readInput()
        let response = Int(response_str) ?? -1
        
        switch response {
        case 1:
            viewAccount()
        case 2:
            depositMoney()
        case 3:
            withdrawMoney()
        case 0:
            currentUser = nil
            return
        default:
            continue
        }
        
    }
}

func viewAccount(){
    guard let currentUser = currentUser else {
        fatalError("currentUser is nil")
    }
    
    currentUser.outputDetails()
    Utils.pause()
}
func depositMoney(){
    guard let currentUser = currentUser else {
        fatalError("currentUser is nil")
    }
    let amount_str = Utils.readInput("Amount to deposit: ")
    guard let amount = Double(amount_str) where amount > 0 else {
        print("number is not valid")
        return
    }
    
    currentUser.deposit(amount)
    print("(amount) depositted successfully")
    Utils.pause()
}

func withdrawMoney(){
    guard let currentUser = currentUser else {
        fatalError("currentUser is nil")
    }
    let amount_str = Utils.readInput("Amount to withdraw: ")
    guard let amount = Double(amount_str) where amount > 0 else {
        print("number is not valid")
        return
    }
    if currentUser.withdraw(amount) {
        print("(amount) withdrew successfully")
    } else {
        print("not enough balance")
    }
    Utils.pause()
}

func signup(){
    Utils.clearScree()
    
    print(">>>>>>> SIGNUP")
    let username = Utils.readInput("Username: ")
    let password = Utils.readInput("Password: ")
    let name = Utils.readInput("Name: ")
    
    users.append(User(username: username,password: password,name: name)!)
    print("Signup successful")
    Utils.pause()
}

func main(){
    repeat {
        Utils.clearScree()
        
        print("Welcome to Swift Bank")
        print("1. Login")
        print("2. Signup")
        print("0. Exit")
        
        let response_str = Utils.readInput()
        let response = Int(response_str) ?? -1
        
        switch response {
        case 1:
            login()
        case 2:
            signup()
        case 0:
            return
        default:
            continue
        }

    } while true
}

main()

Utils.swift

//
//  Utils.swift
//  SwiftBank
//
//  Created by cyper on 6/1/16.
//  Copyright ? 2016 Moaz Tech. All rights reserved.
//

import Foundation
class Utils {
    static func readInput(prompt: String = "> ") -> String {
        print(prompt,terminator: "")
        repeat {
            guard let res_str = readLine() where !res_str.isEmpty else {
                continue
            }
            
            return res_str
            
        } while true
        
    }
    
    static func clearScree() {
        print("")
        print("")
        print("")
        print("")
    }
    
    static func pause(){
        var _ = readLine()
    }
}

User.swift

//
//  User.swift
//  SwiftBank
//
//  Created by cyper on 6/2/16.
//  Copyright ? 2016 Moaz Tech. All rights reserved.
//

import Foundation
class User {
    var username: String!
    var password: String!
    var name: String!
    var savings: Double = 0.0
    
    init?(username: String,password: String,name: String){
        if username.isEmpty
        || password.isEmpty
            || name.isEmpty {
            return nil
        }
        
        self.username = username
        self.password = password
        self.name = name
    }
    
    func deposit(amount: Double){
        savings += amount
    }
    
    func withdraw(amount: Double) -> Bool {
        let after = savings - amount
        if after < 0.0 {
            return false
        }
        
        // ignore negative value
        savings -= max(0.0,amount)
        return true
    }
    
    func outputDetails(){
        print("username: (username)")
        print("password: (password)")
        print("name: (name)")
        print("savings: (savings)")
    }
}

程序的入口不是main函数,而是main.swift文件,定义在这个文件中的代码会被顺次执行. 总共有两屏的Menu外层是Welcome screen Menu,内层是登录后的User Menu.. 没什么新的,主要是readLine(..),guard let ... else {} 的用法.,静态的工具类Utils写法,以及定义一个简单的POJO(使用了failable initializer)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读