swift - 如何使用 Swift 函数返回的值

标签 swift function

我正在尝试使用 Swift 函数在 View 的中心放置一个圆圈,因此无论屏幕大小如何,它始终位于中心。我可以在由一组任意 x 和 y 值定义的点处绘制圆,但我需要函数来提供这些值。

我创建了一个名为 screenCentre() 的函数来读取和返回两个参数,即中心坐标。然而 Xcode 警告说

“调用 screenCentre() 的结果未被使用”

我已经完成了 Swift tutorials on functions and closures并了解如何将参数传递给函数,但我仍然不清楚如何使用此函数返回的值。

这是我的代码:

import UIKit

class ViewController: UIViewController {

   let radius = CGFloat(20)
   let fillColour  = UIColor.clear.cgColor
   let lineColour  = UIColor.red.cgColor
   let lineWidth  = 1.0

   var x: CGFloat?
   var y: CGFloat?

   override func viewDidLoad() {
       super.viewDidLoad()

       screenCentre()
       print(screenCentre())

      // arbitrary set of coordinates used to draw circle

      circle(x: 150, y: 170)

   }

   func screenCentre() -> (x: CGFloat, y: CGFloat)
   {
      return (self.view.bounds.size.width / 2, self.view.bounds.size.height / 2)
   }

   func circle(x: CGFloat, y: CGFloat) {
       let circlePath = UIBezierPath(arcCenter: CGPoint(x: x,y: y), radius: radius, startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)

       let shapeLayer          = CAShapeLayer()
       shapeLayer.path         = circlePath.cgPath

       shapeLayer.fillColor    = fillColour
       shapeLayer.strokeColor  = lineColour
       shapeLayer.lineWidth    = CGFloat(lineWidth)

       view.layer.addSublayer(shapeLayer)
   }
}

更新

通过声明一个常量,我可以使用这个函数返回的值。 Sam_M 和 Kevin Bunarjo 回答了问题。

但是 Daniel T 和 PEEJWEEJ 都发现了一个我没有意识到的相关问题。在我应用 fixits 后,Daniel T 提供的扩展解决方案现在为我提供了一种围绕中心旋转屏幕的方法。所以我把它标记为最佳答案。感谢所有做出贡献的人。

这是更新后的代码。

    let centre = UIScreen.main.centre
    circle(x: centre.x, y: centre.y)
}

func screenCentre() -> CGPoint {
    return CGPoint(x: UIScreen.main.bounds.midX, y: UIScreen.main.bounds.midY)
}

最佳答案

您的 screenCentre() 函数在 viewDidLoad 中不起作用,因为 view 尚未调整到屏幕大小,因此它的中心是不在屏幕中间。

改用这个:

func screenCentre() -> CGPoint {
    return CGPoint(x: UIScreen.mainScreen().bounds.midX, y: UIScreen.mainScreen().bounds.midY)
}

请注意,我使用的是 CGPoint 而不是元组,但效果是一样的。此外,上述函数不需要在您的 View Controller 或任何其他类中,因为它不引用 self。它可以是一个全局函数。

由于 Swift 风格指南鼓励在全局函数上创建方法,您可能更愿意将函数放在这样的扩展中:

extension UIScreen {
    var centre: CGPoint {
        return CGPoint(x: bounds.midX, y: bounds.midY)
    }
}

可以这样调用:

let centre = UIScreen.mainScreen().centre
print(centre)

关于swift - 如何使用 Swift 函数返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39949216/

相关文章:

ios - 如何在下载图像之前运行事件指示器?

mysql - 无法将 PHPMyAdmin 的编辑例程面板用于多行程序

python - 如果 python 中另一个输入参数为 TRUE,是否有一种方法将函数的所有输入参数设置为 TRUE?

php - mysqli_multi_query php函数是否连接1次到数据库或每个查询?

c - 从字符串 C 中删除字符

javascript - 比较两个字符串并返回它们之间的共同字符?

ios - 本地通知限制

swift - NSKeyedUnarchiver 无法解码我的一些 key

ios - 如何从 HealthKit 运行锻炼中获取海拔增益、步频和运行配速?

ios - 在用户无法访问的地方快速保存图片