實例方法
with
withMemoryRebound(to:capacity:_:)
執行給定的閉包,同時將內存臨時綁定到指定數量的
T
類型的實例。聲明
func withMemoryRebound<T, Result>(
to type: T.Type,
capacity count: Int,
_ body: (UnsafePointer<T>) throws -> Result
) rethrows -> Result
返回值
body
閉包參數的返回值(如果有)。
參數
type
臨時綁定此指針引用的內存的類型。此指針必須是此類型對齊的倍數。
count
重新綁定區域中
T
的實例數。body
一個閉包,它將類型化指針指向與此指針相同的內存,僅綁定到類型
T
。閉包的指針參數僅在閉包執行期間有效。如果body
有返回值,則該值也用作withMemoryRebound(to:capacity:_:)
方法的返回值。pointer
指針臨時綁定到
T
。
詳述
當您有指向原始內存的指針並且需要將該內存作為給定類型 T
的實例訪問時,請使用此方法。以T
類型訪問內存需要將內存綁定到該類型。一個內存位置一次隻能綁定到一種類型,因此在不首先重新綁定內存的情況下訪問與不相關類型相同的內存是未定義的。
重新綁定區域內的T
的任何實例都可以被初始化或未初始化。 T
的任何單個實例的底層內存必須具有相同的初始化狀態(即已初始化或未初始化)。訪問底層內存處於混合初始化狀態的 T
應是未定義的行為。
以下示例臨時將原始內存指針重新綁定到 Int64
,然後訪問有符號整數的屬性。
let pointer: UnsafeRawPointer = fetchValue()
let isNegative = pointer.withMemoryRebound(
to: Int64.self, capacity: 1
) {
return $0.pointee < 0
}
執行 body
後,此方法將內存重新綁定回其原始綁定狀態。這可以是未綁定的內存,也可以綁定到不同的類型。
可用版本
iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+
相關用法
- Swift UnsafeRawPointer advanced(by:)用法及代碼示例
- Swift UnsafeRawPointer ...(_:_:)用法及代碼示例
- Swift UnsafeRawPointer ..<(_:)用法及代碼示例
- Swift UnsafeRawPointer bindMemory(to:capacity:)用法及代碼示例
- Swift UnsafeRawPointer ...(_:)用法及代碼示例
- Swift UnsafeRawPointer ..<(_:_:)用法及代碼示例
- Swift UnsafeRawPointer用法及代碼示例
- Swift UnsafeRawBufferPointer.Iterator dropFirst(_:)用法及代碼示例
- Swift UnsafeRawBufferPointer.Iterator max()用法及代碼示例
- Swift UnsafeRawBufferPointer shuffled(using:)用法及代碼示例
- Swift UnsafeRawBufferPointer isEmpty用法及代碼示例
- Swift UnsafeRawBufferPointer enumerated()用法及代碼示例
- Swift UnsafeRawBufferPointer subscript(_:)用法及代碼示例
- Swift UnsafeRawBufferPointer starts(with:)用法及代碼示例
- Swift UnsafeRawBufferPointer.Iterator filter(_:)用法及代碼示例
- Swift UnsafeRawBufferPointer firstIndex(where:)用法及代碼示例
- Swift UnsafeRawBufferPointer.Iterator drop(while:)用法及代碼示例
- Swift UnsafeRawBufferPointer.Iterator min()用法及代碼示例
- Swift UnsafeRawBufferPointer.Iterator contains(where:)用法及代碼示例
- Swift UnsafeRawBufferPointer contains(where:)用法及代碼示例
- Swift UnsafeRawBufferPointer.Iterator contains(_:)用法及代碼示例
- Swift UnsafeRawBufferPointer.Iterator reduce(into:_:)用法及代碼示例
- Swift UnsafeRawBufferPointer first(where:)用法及代碼示例
- Swift UnsafeRawBufferPointer.Iterator map(_:)用法及代碼示例
- Swift UnsafeRawBufferPointer allSatisfy(_:)用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 UnsafeRawPointer withMemoryRebound(to:capacity:_:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。