當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Swift UnsafeMutablePointer withMemoryRebound(to:capacity:_:)用法及代碼示例

實例方法

withMemoryRebound(to:capacity:_:)

執行給定的閉包,同時將內存臨時綁定到給定類型的指定數量的實例。

聲明

func withMemoryRebound<T, Result>(
    to type: T.Type,
    capacity count: Int,
    _ body: (UnsafeMutablePointer<T>) throws -> Result
) rethrows -> Result

返回值

body 閉包參數的返回值(如果有)。

參數

type

臨時綁定此指針引用的內存的類型。 T 類型的布局必須與指針的 Pointee 類型兼容。

count

重新綁定區域中T 的實例數。

body

一個閉包,它接受一個可變類型指針,指向與此指針相同的內存,僅綁定到類型 T 。閉包的指針參數僅在閉包執行期間有效。如果body 有返回值,則該值也用作withMemoryRebound(to:capacity:_:) 方法的返回值。

pointer

指針臨時綁定到 T

詳述

當您有一個指向綁定到一種類型的內存的指針並且您需要將該內存作為另一種類型的實例來訪問時,請使用此方法。以T 類型訪問內存需要將內存綁定到該類型。一個內存位置一次隻能綁定到一種類型,因此在不首先重新綁定內存的情況下訪問與不相關類型相同的內存是未定義的。

從此指針開始並覆蓋 T 實例的 count 跨度的內存區域必須綁定到 Pointee 。重新綁定區域內的T 的任何實例都可以被初始化或未初始化。 Pointee 的每個實例與 T 的給定實例重疊應具有相同的初始化狀態(即已初始化或未初始化)。訪問其底層 Pointee 存儲處於混合初始化狀態的 T 應為未定義行為。

以下示例將 UInt64 指針的內存臨時重新綁定到 Int64 ,然後修改有符號整數。


let uint64Pointer: UnsafeMutablePointer<UInt64> = fetchValue()
uint64Pointer.withMemoryRebound(to: Int64.self, capacity: 1) {
    $0.pointee.negate()
}

因為在 body 閉包執行時,該指針的內存不再綁定到它的 Pointee 類型,所以不要使用 body 中的原始指針訪問內存。相反,使用 body 閉包的指針參數來訪問內存中的值作為類型 T 的實例。

執行 body 後,此方法將內存重新綁定回原始的 Pointee 類型。

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 UnsafeMutablePointer withMemoryRebound(to:capacity:_:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。