%를(를) 사용할 수 없음:자르기Remainer를 대신 사용합니다."는 다음을 의미합니까?
확장 코드를 사용할 때 다음 오류가 발생합니다. 다른 연산자를 사용하라는 것인지 인터넷 검색을 기반으로 식의 값을 수정하라는 것인지 잘 모르겠습니다.
오류: %를(를) 사용할 수 없습니다.잘라내기잔여를 대신 사용
확장 코드:
extension CMTime {
var durationText:String {
let totalSeconds = CMTimeGetSeconds(self)
let hours:Int = Int(totalSeconds / 3600)
let minutes:Int = Int(totalSeconds % 3600 / 60)
let seconds:Int = Int(totalSeconds % 60)
if hours > 0 {
return String(format: "%i:%02i:%02i", hours, minutes, seconds)
} else {
return String(format: "%02i:%02i", minutes, seconds)
}
}
}
분 및 초 변수를 설정할 때 오류가 발생합니다.
CMTimeGetSeconds()
부동 소수점 번호()를 반환합니다.Float64
아카Double
스위프트 2에서 부동 소수점 분할의 나머지를 다음과 같이 계산할 수 있습니다.
let rem = 2.5 % 1.1
print(rem) // 0.3
스위프트 3에서는 다음과 같이 처리됩니다.
let rem = 2.5.truncatingRemainder(dividingBy: 1.1)
print(rem) // 0.3
코드에 적용됨:
let totalSeconds = CMTimeGetSeconds(self)
let hours = Int(totalSeconds / 3600)
let minutes = Int((totalSeconds.truncatingRemainder(dividingBy: 3600)) / 60)
let seconds = Int(totalSeconds.truncatingRemainder(dividingBy: 60))
그러나 이 특정한 경우에는 우선 지속 시간을 정수로 변환하는 것이 더 쉽습니다.
let totalSeconds = Int(CMTimeGetSeconds(self)) // Truncate to integer
// Or:
let totalSeconds = lrint(CMTimeGetSeconds(self)) // Round to nearest integer
다음 행은 다음으로 단순화됩니다.
let hours = totalSeconds / 3600
let minutes = (totalSeconds % 3600) / 60
let seconds = totalSeconds % 60
그%
모듈러스 연산자는 정수 형식에 대해서만 정의됩니다.부동 소수점 유형의 경우 원하는 IEEE 754 분할/잔여 동작의 종류를 보다 구체적으로 지정해야 하므로 메서드를 다음 중 하나 또는 .(부동 소수점 수학을 수행하는 경우에는 실제로 이 작업과 다른 많은 작업을 수행해야 하거나 예기치 않은/나쁜 결과를 얻을 수 있습니다.)
정수 계수를 실제로 수행하려는 경우 다음 값의 반환 값을 변환해야 합니다.CMTimeGetSeconds
사용하기 전에 정수까지%
. (만약 그렇게 한다면, 당신은 몇 초 안에...사용처에 따라CMTime
중요할 수도 있습니다.분:초:프레임을 원하십니까?)
발표 방법에 따라CMTime
UI에서 값을 추출하여 적절한 로케일 지원을 받으려면 seconds 값을 추출하여 전달하는 것이 더 나을 수 있습니다.
swift 3의 간단한 modulo 구문을 다시 가져옵니다.
이 구문은 실제로 애플 공식 스위프트 메일링 리스트에 제안되었지만 어떤 이유에서인지 그들은 덜 우아한 구문을 선택했습니다.
infix operator %%/*<--infix operator is required for custom infix char combos*/
/**
* Brings back simple modulo syntax (was removed in swift 3)
* Calculates the remainder of expression1 divided by expression2
* The sign of the modulo result matches the sign of the dividend (the first number). For example, -4 % 3 and -4 % -3 both evaluate to -1
* EXAMPLE:
* print(12 %% 5) // 2
* print(4.3 %% 2.1) // 0.0999999999999996
* print(4 %% 4) // 0
* NOTE: The first print returns 2, rather than 12/5 or 2.4, because the modulo (%) operator returns only the remainder. The second trace returns 0.0999999999999996 instead of the expected 0.1 because of the limitations of floating-point accuracy in binary computing.
* NOTE: Int's can still use single %
* NOTE: there is also .remainder which supports returning negatives as oppose to truncatingRemainder (aka the old %) which returns only positive.
*/
public func %% (left:CGFloat, right:CGFloat) -> CGFloat {
return left.truncatingRemainder(dividingBy: right)
}
이 간단한 스위프트 3 마이그레이션 팁은 다양한 통찰력이 있는 보다 포괄적인 스위프트 3 마이그레이션 가이드의 일부입니다(35k loc / 마이그레이션 8일) http://eon.codes/blog/2017/01/12/swift-3-migration/
코드가 더 안전하다고 생각하지 않는 한 부동 소수점 번호를 위한 별도의 모듈로 연산자를 만들 필요가 없습니다.당신은 오버로드 할 수 있습니다.%
연산자는 부동 소수점 번호를 다음과 같이 받아들입니다.
func %<N: BinaryFloatingPoint>(lhs: N, rhs: N) -> N {
lhs.truncatingRemainder(dividingBy: rhs)
}
사용.
let a: Float80 = 10
let b: Float80 = 3
print(a % b)
이제 사용할 수 있습니다.%
동일한 유형의 부동 소수점 번호 두 개를 사용할 수 있습니다.
스위프트 3에서는 다음과 같은 기능이 있음을 발견했습니다.
let minutes = Int(floor(totalSeconds / 60))
let seconds = Int(totalSeconds) % 60
totalSeconds
TimeInterval
(Double
).
언급URL : https://stackoverflow.com/questions/40495301/what-does-is-unavailable-use-truncatingremainder-instead-mean
'programing' 카테고리의 다른 글
데이터베이스에서 상위 테이블과 하위 테이블이란? (0) | 2023.09.27 |
---|---|
Mysql에서 이메일 주소 확인 (0) | 2023.09.27 |
MySQL 쿼리에서 SELECT로 INSERT INTO를 수행할 때 정적 값을 추가하는 방법은 무엇입니까? (0) | 2023.09.27 |
EXPRESON의 "Using index"와 "Using were; Using index"의 차이점은 무엇입니까? (0) | 2023.09.27 |
If a global variable is initialized to 0, will it go to BSS? (0) | 2023.09.27 |