函数和返回值

时间:2015-06-23 16:53:00

标签: swift function oop return

我是Swift的初学者,所以有些事情对我来说还不是很清楚。我希望有人能向我解释一下:

// Creating Type Properties and Type Methods
class BankAccount {

    // stored properties
    let accountNumber: Int
    let routingCode = 12345678
    var balance: Double
    class var interestRate: Float {
        return 2.0
    }

    init(num: Int, initialBalance: Double) {
        accountNumber = num
        balance = initialBalance
    }

    func deposit(amount: Double) {
        balance += amount
    }

    func withdraw(amount: Double) -> Bool {
        if balance > amount {
            balance -= amount
            return true
        } else {
            println("Insufficient funds")
            return false
        }
    }

    class func example() {
        // Type methods CANNOT access instance data
        println("Interest rate is \(interestRate)")
    }
} 

var firstAccount =  BankAccount(num: 11221122, initialBalance: 1000.0)
var secondAccount = BankAccount(num: 22113322, initialBalance: 4543.54)

BankAccount.interestRate

firstAccount.deposit(520)

所以这就是代码。我想知道为什么deposit()没有返回箭头和返回关键字,withdraw()。我何时使用返回箭头,在什么情况下,是否有规则或其他内容?我不明白。

另外...... 每个人对你的答案都非常友善,现在我越来越清楚了。

在本教程的开头,有功能练习代码

// Function that return values
func myFunction() -> String {
    return “Hello”
}

我想这里不需要这个返回值但是在教程中他们想告诉我们它存在,我是对的吗?

此外,我可以制作一个“错误”,并以某种方式在我的存款功能中使用返回箭头和值吗?我试过这个:

func deposit(amount : Double) -> Double {
    return balance += amount
}

...但它产生了错误。

我在上一家公司看到了高级编码,他们正在创建具有许多自定义和酷炫功能的在线商店,所有代码都充满了返回箭头。这使我感到困惑,我认为这是在OOP中制作方法/函数的默认设置。

其他问题! 我想玩函数所以我想创建一个函数transferFunds(),它将钱从一个帐户转移到另一个帐户。我做了这样的功能

func transferFunds(firstAcc : Int, secondAcc : Int, funds : Double) {
     // magic part
     if firstAcc == firstAccount.accountNumber {
          firstAccount.balance -= funds
     } else {
         println("Invalid account number! Try again.")
     }

     if secondAcc == secondAccount.accountNumber {
          secondAccount.balance += funds
     } else {
         println("Invalid account number! Try again.")
     }
}

这是一个简单的代码,但我知道它甚至可能是愚蠢的。我知道应该有一个代码来检查第一个帐户中是否有足够的资金从我拿钱,但是好的......让我们玩这个。 我想在函数accountNumbers中的参数中指定transferFunds()或其他内容,我想搜索我的虚构库中使用类BankAccount的所有对象/客户端,以便找到一个然后划款。我不知道我是否正确描述了我的问题,但我希望你明白我想做什么。拜托,有人可以帮助我吗?

5 个答案:

答案 0 :(得分:6)

所以在Swift中,没有 箭头 的函数的返回类型为Void

func funcWithNoReturnType() {
  //I don't return anything, but I still can return to jump out of the function
}

这可以改写为:

func funcWithNoReturnType() -> Void {
  //I don't return anything, but I still can return to jump out of the function
}

所以在你的情况下...

func deposit(amount : Double) {
  balance += amount
}

您的方法存款只需 没有,这正是您在方法声明中看不到 return 语句的原因。此方法只是在您的帐户中添加或存入更多资金,而不需要退货声明。

然而,在你的撤回方法上:

func withdraw(amount : Double) -> Bool {
  if balance > amount {
      balance -= amount
      return true
  } else {
      println("Insufficient funds")
      return false
  }
}

此方法采用 Type Double 的单个参数,并返回 Boolean 。关于 撤销 方法,如果您的余额小于您撤回的金额>(金额),那是不可能的,这就是为什么 返回 false ,但如果你有足够的钱您的帐户,优雅地撤回钱,并返回true,就像操作成功一样。

我希望这会让你感到很困惑。

答案 1 :(得分:3)

欢迎编程!好问题,坚持下去,你会做得很好。

具有返回值的函数正在为调用代码提供信息。例如,对于存款功能,可以预期不会发生任何异常情况,因此无需返回任何可由来电者检查的内容。

在提款功能中,提取的金额可能大于可用余额。如果是这种情况,该函数将返回false。调用函数可以检查该值并通知用户他们试图提取超过可用的值。 Otoh,如果返回true值,那么程序将从余额中扣除该金额,并可能向客户提供所请求的资金。

答案 2 :(得分:1)

在Swift文档中查看Function Parameters and Return Values

  

定义返回类型不需要函数。这是sayHello函数的一个版本,名为sayGoodbye,它打印自己的String值而不是返回它:

func sayGoodbye(personName: String) {
    println("Goodbye, \(personName)!")
}
sayGoodbye("Dave")
// prints "Goodbye, Dave!"
     

因为它不需要返回值,所以函数的定义不包括返回箭头( - >)或返回类型。

在您的示例中,deposit(_:)没有返回任何内容,它只是修改了一个实例变量。这是典型的功能,总是会成功。

另一方面,

withdraw(:_)可能会失败(由于资金不足),因此会返回Bool,表明它是否有效。

答案 3 :(得分:0)

这个问题可以被称为与语言无关的问题,所以请回答你。

方法是包含一系列语句的代码块。方法可以向调用者返回一个值,但不必这样做。这是您作为开发人员的决定。将值返回给调用者的方法将包含关键字:“return”,以及在方法签名中声明的值类型。

我想提一下 Bertrand Meyer 创造的命令查询分离(CQS)原则。 Martin Fowler rephrased:基本思想是我们应该将对象的方法划分为两个截然不同的类别:

  • 查询:返回结果,不要更改可观察状态 系统(没有副作用)。 Mark Seemann 表示查询不会改变可观察状态。它们幂等,可以安全地调用。
  • 命令:更改系统状态但不返回值。您可以,并且可以安全地从命令调用查询,但反之亦然。

答案 4 :(得分:0)

来源 https://thenucleargeeks.com/2019/05/08/functions-in-swift/ 快速通过“ func”关键字定义功能。根据要求声明一个函数时,它可以带有一个或多个参数,对其进行处理并返回不带参数且没有返回值的valueFunction。

没有参数且没有返回类型的函数。

Syntax:
func function_name() {
--
}
func addTwoNumbers() {
let a = 1
let b = 2
let c = a+b
print(c)  // 3
}

addTwoNumbers() 

没有参数和返回类型的函数

Syntax:
func function_name() -> Data Type {
 --
return some values
}
func addTwoNumbers()->Int {
let a = 1
let b = 2
let c = a+b
return c 
}

let sum = addTwoNumbers()
print(sum) // 3

具有参数和返回类型的函数

Syntax: 
func function_name(arguments parameter_name: Data Type) -> Data Type { 
------ 
return some values 
}
func addTwoNumbers(arg param: Int)->Int {
let a = param
let b = 2
let c = a+b
return c
}

let sum = addTwoNumbers(arg: 4)
print(sum) // 6

或者,您可以跳过arg并将值直接传递给函数。

func addTwoNumbers(param: Int)->Int {
let a = param
let b = 2
let c = a+b
return c
}

let sum = addTwoNumbers(param: 4)
print(sum) // 6

具有参数且没有返回类型的函数

Syntax: 
func function_name(arguments parameter_name: Data Type)  {
  ----
 return some values
}
func addTwoNumbers(arg param: Int){
let a = param
let b = 2
let c = a+b
print(c)  //6
}
addTwoNumbers(arg: 4)