将Swift中的协议/代表映射到c#

将Swift中的协议/代表映射到c#,c#,ios,swift,C#,Ios,Swift,我试图理解Swift中协议和委托的用法,以及它们在c#for Xamarin.iOS中的等价性 微软在这方面有一个不错的文档,但对我来说,它缺乏与c#code相对应的swift或Objective,让我能够理解该怎么做 我正在向c#Xamarin iOS移植一个 我有这个协议: protocol GridLayoutDelegate: class { func scaleForItem(inCollectionView collectionView: UICollectionView,

我试图理解Swift中协议和委托的用法,以及它们在c#for Xamarin.iOS中的等价性

微软在这方面有一个不错的文档,但对我来说,它缺乏与c#code相对应的swift或Objective,让我能够理解该怎么做

我正在向c#Xamarin iOS移植一个

我有这个协议:

protocol GridLayoutDelegate: class {
    func scaleForItem(inCollectionView collectionView: UICollectionView, withLayout layout: UICollectionViewLayout, atIndexPath indexPath: IndexPath) -> UInt
    func itemFlexibleDimension(inCollectionView collectionView: UICollectionView, withLayout layout: UICollectionViewLayout, fixedDimension: CGFloat) -> CGFloat
    func headerFlexibleDimension(inCollectionView collectionView: UICollectionView, withLayout layout: UICollectionViewLayout, fixedDimension: CGFloat) -> CGFloat
}
我已转换为:

public interface IGridLayoutDelegate
{
    uint ScaleForItem(UICollectionView collectionView, UICollectionViewLayout layout, NSIndexPath indexPath);
    nfloat ItemFlexibleDimension(UICollectionView collectionView, UICollectionViewLayout layout, nfloat fixedDimension);
    nfloat HeaderFlexibleDimension(UICollectionView collectionView, UICollectionViewLayout layout, nfloat fixedDimension);
} 
到目前为止还不错

在代码的后面,我有一个(目前)奇怪的声明:

weak var delegate: GridLayoutDelegate?
令我担心的是,swift代码中以后从未分配过它

目前,我的c#类声明为:

public class GridLayout : UICollectionViewLayout, IGridLayoutDelegate
{
...
}

c#中对应的代码是什么?

Swift
语言使用,因此它需要
弱var
来处理循环引用引起的内存泄漏

与此相反,
C#
使用垃圾收集器,它自己处理循环引用,而无需额外的手动操作(此处更详细:。当循环引用中的两个对象具有相似的生存期时,如果其中一个对象比另一个对象寿命长而不取消订阅,则可能会弹出此对话框)

因此,我认为在
C#
中,您只需要:

public class GridLayout : UICollectionViewLayout, IGridLayoutDelegate
{
    private IGridLayoutDelegate @delegate;
我不熟悉
Xamarin
,因此我不能确定如何初始化
@delegate