2014-12-16 18 views
5

मैं हाल ही में मेरे कोड में कुछ अजीब पर ठोकर खाई में एक आलसी गुण में से स्वयं को संदर्भित नहीं कर सकता हूँ, मैं कुछ दिनों के लिए एक ही परियोजना में प्रोग्रामिंग है, लेकिन अचानक मैं इस के साथ एक आलसी संपत्ति बनाने की कोशिश की कोड:तेज

import UIKit 

class CategoryViewController: UICollectionViewController { 

    lazy var searchController: UISearchController = { 
    let searchController = UISearchController(searchResultsController: nil) 
    searchController.searchBar.frame = CGRect(x: 0, y: 0, width: CGRectGetWidth(self.collectionView.frame), height: 44) 
    return searchController 
    }() 
} 

अब हर बार जब मैं के साथ से स्वयं को संदर्भित करने के आलसी ब्लॉक में कोशिश यह इस का उत्पादन:

self.(<#NSObject#>) 

और अन्य गुण में से कोई भी उपयोग नहीं कर सकते।

तो मैं कड़ी मेहनत से कोड करने की कोशिश उन्हें यह पैदा करता है:

UICollectionView? does not have a member named 'frame' 

और प्रदर्शित करता है इसके बाद के संस्करण कोड:

Extra argument 'width' in call 

मैं पहले से ही कोड के पुनर्लेखन के लिए और व्युत्पन्न डेटा को नष्ट करने, फिर से निर्माण करने की कोशिश की लेकिन त्रुटि बनी रहती है। ऐसा कोई विचार है कि ऐसा क्यों हो सकता है?

enter image description here

उत्तर

1

UICollectionView:

अग्रिम

अद्यतन स्वत: पूर्ण बॉक्स में धन्यवाद? एक सदस्य 'फ्रेम'

प्रश्न चिह्न देखें नामित नहीं है? इसका मतलब है कि यह एक वैकल्पिक है। जब तक आप इसे अनचाहे नहीं करते हैं तब तक आप किसी भी संदेश को वैकल्पिक तक नहीं भेज सकते हैं। तो इसे अनदेखा करें: self.collectionView!.frame

संपादित करें इस कारण से पहले काम किया गया था, और फिर आपका कोड टूट गया, यह है कि स्विफ्ट API बदल गया। ऐप्पल यह बहुत करता है, इसलिए आपको "पेंच के साथ रोल करना होगा"। जब भी आप एक्सकोड अपग्रेड करते हैं तो आपको अपने कोड को तोड़ने के लिए तैयार रहना होगा। वे के बारे में है कि क्या एक UICollectionViewController के collectionView एक वैकल्पिक या नहीं होना चाहिए उनके दिमाग में तीन बार बदल दिया है। और मुझे पूरा विश्वास नहीं है कि उनका जवाब अभी भी सही है।

आगे संपादित कि स्वतः पूर्ण दिखा रहा है काम करता है:

enter image description here

+0

मुझे लगता है कि आप optionals को संदेश भेज सकते हैं, लेकिन जब तक आप इसे खोलने –

+1

@ DánielNagy मैं क्या मतलब है कि आप उनके गुणों नहीं मिल सकता है आप केवल (जैसे विशेष वैकल्पिक 'map' के रूप में) Optionals के लिए वैकल्पिक संदेश भेज सकते हैं, और आप ऐसा करने के लिए कोई कारण नहीं करेंगे। और एक वैकल्पिक के पास कोई गुण नहीं है। यह उस चीज के अंदर लपेटा गया है जिसमें गुण हैं; यही कारण है कि आपको इसे खोलना है! – matt

+1

@ DánielNagy आप समझ में नहीं आता है, तो क्या एक वैकल्पिक है, मेरा उत्तर यहाँ देखें: http://stackoverflow.com/a/27370841/341994 – matt