最近在學習swift,在學習過程中經(jīng)常遇到一些系統(tǒng)的警告,因此在網(wǎng)上尋求大佬解答衙解,于是乎在@Soul丶凱少大佬的文章中尋得部分解答豁辉,分享給各位童鞋令野,希望能有所幫助
1.?Initialization of immutable value 'XXX' was never used; consider replacing with assignment to '_' or removing it.
直譯:不可變量'XXX'的初始值并沒有用到;考慮下用'_'替代或移除它徽级。
分析:直譯夠簡單明了了气破。我們可能在之前創(chuàng)建了一個變量/常量,賦予了它值并準備使用餐抢;然而我們由于種種原因并沒有用到這個值现使。出于對內(nèi)存優(yōu)化的考慮,系統(tǒng)提示我們使用或干掉它旷痕。
解決方法:1.直接刪掉這個值(或者你可以注釋掉以防用到)碳锈;2.確認我們將來可能會用到這個值而暫時用不到,那就點一下黃色"warning"欺抗,系統(tǒng)會幫你替換為"_"售碳。
2.?'init(start:end:)' is deprecated: it will be removed in Swift 3. ?Use the '..<' operator.
直譯:'XXX'已經(jīng)被廢棄了:它將在Swift 3時被移除。使用'XXX'方法绞呈。
分析:當我們看到"is deprecated"的時候贸人,代表我們當前使用的屬性或方法被廢棄了。警告中一般帶有建議替換的方法或?qū)傩悦Q报强。替換就可以了灸姊。
解決方法:點擊當前方法進入源文件,找到新的方法秉溉,分析新方法的使用方式后替換廢棄的方法力惯。
3.??Variable 'XXX' was never mutated; consider changing to 'let' constant
直譯:變量'XXX'的值從未改變碗誉;考慮改變?yōu)?let'修飾的常量。
分析:這是Swift中出現(xiàn)的錯誤父晶。我們在聲明一個值得時候哮缺,要同時聲明這個值為"var"變量或"let"常量。若聲明為變量而實際值未改變過時甲喝,會出現(xiàn)上述警告讓你改為"let"尝苇;若聲明為變量而值改變過時,會出現(xiàn)紅色報錯提示你改為"var"埠胖。
解決方法:點擊黃色警告糠溜,在出現(xiàn)系統(tǒng)提示后回車即可替換。
4.?Use '#selector' instead of explicitly constructing a 'Selector'
直譯:使用'#selector'代替明確的構(gòu)造一個'Selector'結(jié)構(gòu)體直撤。
分析:這個也是Swift特有的問題非竿,不過我想說的'instead of'不是。一般這種情況的產(chǎn)生是因為語言版本的更新而造成了一部分語法的不同谋竖。使用'instead of'之前的方式即可红柱。
解決方法:若可以,則直接點擊警告然后回車替換蓖乘。若不可以锤悄,則看警告信息知道要替換的語法后,自己替換嘉抒。
5.?The image set name "XXX" is used by multiple image sets.
直譯:名稱為"XXX"的圖片組重復了零聚。
分析:這個警告的意思是,你引入了兩個或多個相同名稱的圖片組众眨。一般發(fā)生在我們獲得新的切圖并放入工程之后握牧。
解決方法:刪除重名的一組圖片,或?qū)⑵渲幸唤M圖片修改名字娩梨。
6.?The image set "XXX" has an unassigned child.
直譯:名為"XXX"圖片的圖片組有一個不可同化的子圖片沿腰。
分析:我們都知道iOS因為屏幕分辨率的問題,切圖一般有三套狈定,我們通過在一組圖片中的每張圖片后添加后綴@2x/@3x來區(qū)分每張圖片不同分辨率對應(yīng)的不同屏幕颂龙。但如果我們并沒有這樣命名,就會出現(xiàn)上述問題纽什。
解決方法:將未設(shè)置分辨率比例的圖片設(shè)置一下措嵌,或者刪掉這個圖片。
7.?The image set "XXX" references a file "XXX.JPG", but that file does not have a valid extension.
直譯:圖片組"XXX"涉及到了文件"XXX.JPG"芦缰,但是這個文件沒有一個正當?shù)臄U展名企巢。
分析:iOS支持的圖片類型主要有"JPG, JPEG, GIF, PNG",這么看貌似也有"JPG"格式让蕾。但是iOS支持的擴展名都是小寫浪规。
解決方法:將".JPG"改為".jpg"即可或听。
8.AppIcon.appiconset/logo_83.5.png is 84x84 but should be 167x167.
直譯:App的標示圖片分辨率是84x84但是應(yīng)該是167x167。
解決方法:放置合適分辨率的圖片笋婿。
9.?Warning: Multiple build commands for output file fanhui@2x.png
直譯:當我們導出文件時出現(xiàn)了多樣的控制誉裆。
分析:這個錯誤發(fā)生在我們直接將文件加入工程,而不是放在Assets.xcassets中的時候可能出現(xiàn)(對比上述第5個問題)缸濒,原因是我們重復放入了兩個相同名稱的圖片足丢。
解決方法:刪掉一個圖片或者將其中一個圖片改名。
10.?Main.storyboard Frame for "XXX" will be different at run time.
直譯:在"Main.storyboard"上的"XXX"控件的框架在運行時會與現(xiàn)在不一樣庇配。
分析:這是因為我們在設(shè)置完成控件的約束后沒有Update Frames斩跌。
解決方案:Update Frames就好。
11.?Unsupported Configuration: “View Controller“ is unreachable because it has no entry points, and no identifier for runtime access via -[UIStoryboard instantiateViewControllerWithIdentifier:].
直譯:不支持的設(shè)置:"View Controller"是不能被取到的讨永,因為它沒有程序入口指針滔驶,也沒有標識符以供方法[UIStoryboard instantiateViewControllerWithIdentifier:]在運行時獲取。
分析:相當于你創(chuàng)了一個UIViewController缺什么都沒設(shè)置卿闹。
解決方案:干掉,或者起個標識符并使用萝快。
目前尚有一些warning沒有解決锻霎,另外還有些第三方框架的警告沒有修改。不過已經(jīng)從150修改到27了揪漩。希望大家在寫代碼的時候遵循格式旋恼,不要無視警告,影響整個程序代碼的效率與整潔奄容。
12.Warning:
程序一運行之后打印:objc[56768]: Class PLBuildVersion is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x1140fd998) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x113f1f880). One of the two will be used. Which one is undefined.
原因很簡單冰更,你使用了<AssetsLibrary/AssetsLibrary.h>?( iOS9.0之后廢棄 ) 或者<Photos/Photos.h>?(iOS8.0之后可以使用)這兩個程序之一,并且你的程序的最低版本配置在8.0之上昂勒;或者你使用了其他兩個相同功能的蘋果官方framework蜀细。它的意思就是兩個類重名了,但是包含在兩個framework里面戈盈。
這個問題暫時無法避免奠衔,但是沒有關(guān)系不影響運行。PLBuildVersion在這兩個框架里都是一樣的塘娶,不影響實際運行归斤。
原址:https://www.cnblogs.com/SoulKai/p/5865175.html