2016-09-28 3 views
1

특정 주중 특정 요일을 가져 오는 함수를 만듭니다.Swift 3.0 범위를 함수 매개 변수로 사용

예. 9.2016에서 일요일 =

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 

4,11,18,25은 내가 lookingFor 매개 변수 내가 매개 변수의 범위를 지정할 수 있습니다 7

-1의 숫자를 얻을 수 있는지 확인하고 싶어?! 가드 성명이 필요합니까?!

답변

2
나는 패턴 일치 연산자와 가드 한 Statment 사용하여 기능의 단순한 검사하지 않은 매개 변수를 확인 할 수있는 방법이 있다고 생각하지 않습니다

:

var lookingForRange = 1...7 
func foo(lookingFor: Int){ 
    guard lookingForRange ~= lookingFor else{ 
     //handle out of range 
     print("out of range") 
     return 
    } 
} 

//prints out of range 
foo(lookingFor: 8) 

더 자세한 대답 패턴이 일치 : Can I use the range operator with if statement in Swift?

관련 문제