range - Swift 3.0 范围作为函数参数

标签 range swift3 function-parameter

我正在制作一个函数来获取特定工作日的特定日期

前任。 2016 年 9 月的星期日 = 4,11,18,25

import UIKit

var daysOff = [Int]()

func getNumberOfDaysInMonth (_ month : Int , _ Year : Int ,lookingFor : Int) -> (firstDay: Int , daysResults: [Int]) {
var day = Int()


if lookingFor > 7 || lookingFor < 1 {
    print("error")
   return (0,[0])
}else {
    day = lookingFor
}

let dateComponents = NSDateComponents()
dateComponents.year = Year
dateComponents.month = month
let calendar = Calendar(identifier: .gregorian)
let date = calendar.date(from: dateComponents as DateComponents)!


let range = calendar.range(of: .day, in: .month, for: date)

let maxDay = range?.count

let dow = calendar.component(.weekday, from: date)

var firstday = 0
switch dow  {
case let x where x > day:
    let a = 8 - dow
    firstday = a + day
case let x where x < day:
    let a = day - dow
    firstday = a + 1
case let x where x == day:
    firstday = dow
    default:
    print("error")
}
switch firstday {
case 1:
    print("1")
    if maxDay! > 29 {
        daysOff = [1,8,15,22,29]
    } else {
        daysOff = [1,8,15,22]
    }
case 2:
    print("2")
    if maxDay! > 30 {
        daysOff = [2,9,16,23,30]
    }else {
        daysOff = [2,9,16,23]
    }
case 3:
    print("3")
    if maxDay! == 31 {
        daysOff = [3,10,17,24,31]
    }else {
        daysOff = [3,10,17,24]
    }
case 4:
    print("4")
    daysOff = [4,11,18,25]
case 5:
    print("5")
    daysOff = [5,12,19,26]
case 6:
    print("6")
    daysOff = [6,13,20,27]
case 7:
    print("7")
    daysOff = [7,14,21,28]

default:
    print("something went wrong")
}
return (firstday,daysOff)
}
let test = getNumberOfDaysInMonth(9,2016,lookingFor: 7)
test.daysResults
test.firstDay

我想确保 lookFor 参数得到一个从 1 到 7 的数字

我可以指定参数的范围吗?!
我需要一份 guard 声明吗?!

最佳答案

您可以像这样在函数中将范围作为参数传递。

**ClosedRange:**
func withClosedRange(range: ClosedRange<Int>){
    for element in range{
         print(element)
    }
}
*function call:* withClosedRange(range: 1...7)


**Range**
func withRange(range: Range<Int>){
    for element in range{
         print(element)
    }
}
*function call:* withRange(range: 1..<7)


**PartialRange**
func withPartialRange(range: PartialRangeFrom<Int>){
    ...
}
*function call:* withPartialRange(range: 1...)

关于range - Swift 3.0 范围作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39748568/

相关文章:

arrays - Swift 3 多维数组,适用于 Swift 2.2 及更早版本

c++ - Golang 替代 C++ 函数,默认参数为 : multiple functions, 或结构参数

Python:Range() 最大尺寸;动态还是静态?

arrays - 从值范围内的 influxdb 记录中选择

swift - 如何在通知中显示阿拉伯文字?

ios - 字符串不能用 int 索引

c++ - 调用可变大小的数组作为参数

c++ - Typedef数组指针参数的C++ ostream重载

arrays - 存在过滤器时使用数组设置范围的值

ruby-on-rails - Rails - 尝试从日期范围查询...从今天开始的所有内容