第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在Swift中存儲(chǔ)屬性,就像我在Objective-C上一樣?

如何在Swift中存儲(chǔ)屬性,就像我在Objective-C上一樣?

精慕HU 2019-07-31 18:39:46
如何在Swift中存儲(chǔ)屬性,就像我在Objective-C上一樣?我正在將一個(gè)應(yīng)用程序從Objective-C切換到Swift,我有幾個(gè)帶有存儲(chǔ)屬性的類別,例如:@interface UIView (MyCategory)- (void)alignToView:(UIView *)view           alignment:(UIViewRelativeAlignment)alignment;- (UIView *)clone;@property (strong) PFObject *xo;@property (nonatomic) BOOL isAnimating;@end由于Swift擴(kuò)展不接受這些存儲(chǔ)的屬性,我不知道如何維護(hù)與Objc代碼相同的結(jié)構(gòu)。存儲(chǔ)的屬性對(duì)我的應(yīng)用程序非常重要,我相信Apple必須在Swift中創(chuàng)建一些解決方案。正如jou所說,我所尋找的實(shí)際上是使用關(guān)聯(lián)對(duì)象,所以我做了(在另一個(gè)上下文中):import Foundationimport QuartzCoreimport ObjectiveCextension CALayer {     var shapeLayer: CAShapeLayer? {         get {             return objc_getAssociatedObject(self, "shapeLayer") as? CAShapeLayer         }         set(newValue) {             objc_setAssociatedObject(self, "shapeLayer", newValue, UInt(OBJC_ASSOCIATION_RETAIN))         }     }     var initialPath: CGPathRef! {         get {             return objc_getAssociatedObject(self, "initialPath") as CGPathRef         }         set {             objc_setAssociatedObject(self, "initialPath", newValue, UInt(OBJC_ASSOCIATION_RETAIN))         }     }}但是在執(zhí)行以下操作時(shí)我得到了EXC_BAD_ACCESS:class UIBubble : UIView {     required init(coder aDecoder: NSCoder) {         ...         self.layer.shapeLayer = CAShapeLayer()         ...     }}有任何想法嗎?
查看完整描述

3 回答

?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

與Objective-C一樣,您無法將存儲(chǔ)的屬性添加到現(xiàn)有類中。如果您正在擴(kuò)展Objective-C類(UIView肯定是一個(gè)),您仍然可以使用關(guān)聯(lián)對(duì)象來模擬存儲(chǔ)的屬性:


對(duì)于Swift 1


import ObjectiveC


private var xoAssociationKey: UInt8 = 0


extension UIView {

    var xo: PFObject! {

        get {

            return objc_getAssociatedObject(self, &xoAssociationKey) as? PFObject

        }

        set(newValue) {

            objc_setAssociatedObject(self, &xoAssociationKey, newValue, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN))

        }

    }

}

關(guān)聯(lián)鍵是一個(gè)指針,應(yīng)該是每個(gè)關(guān)聯(lián)的唯一指針。為此,我們創(chuàng)建一個(gè)私有全局變量,并使用它的內(nèi)存地址作為&運(yùn)算符的鍵。有關(guān)如何在Swift中處理指針的詳細(xì)信息,請(qǐng)參閱使用Swift with Cocoa和Objective-C 。


更新為Swift 2和3


import ObjectiveC


private var xoAssociationKey: UInt8 = 0


extension UIView {

    var xo: PFObject! {

        get {

            return objc_getAssociatedObject(self, &xoAssociationKey) as? PFObject

        }

        set(newValue) {

            objc_setAssociatedObject(self, &xoAssociationKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)

        }

    }

}

更新為Swift 4


在Swift 4中,它更加簡單。Holder結(jié)構(gòu)將包含我們的計(jì)算屬性將向世界公開的私有值,從而產(chǎn)生存儲(chǔ)屬性行為的錯(cuò)覺。


資源


extension UIViewController {

    struct Holder {

        static var _myComputedProperty:Bool = false

    }

    var myComputedProperty:Bool {

        get {

            return Holder._myComputedProperty

        }

        set(newValue) {

            Holder._myComputedProperty = newValue

        }

    }

}


查看完整回答
反對(duì) 回復(fù) 2019-07-31
  • 3 回答
  • 0 關(guān)注
  • 863 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)