2017-05-29 51 views
0

我有串擴展,你可以在下面看到,但只爲詮釋返回true,我想回到它真實的,所有,詮釋僅值。檢查字符串是int或double,與延伸在迅速3

extension String { 
    var isnumberordouble : Bool { 
     get{ 
      return self.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil 
     } 
    } 
} 

我該如何解決?任何想法 ? TY。

+2

只是檢查,如果字符串可以轉換* *爲int或雙。請參閱https://stackoverflow.com/a/30315832/1187415。 –

+0

'2.'怎麼樣? –

+0

@NiravD是什麼? ,我想只檢查字符串,如果int或double必須返回true,否則必須爲false – SwiftDeveloper

回答

4

正如@MartinR說,檢查字符串可以轉換爲IntDouble

extension String { 
    var isnumberordouble: Bool { return Int(self) != nil || Double(self) != nil } 
} 

print("1".isnumberordouble)  // true 
print("1.2.3".isnumberordouble) // false 
print("1.2".isnumberordouble) // true 

@MartinR提出的意見好點。該轉換爲Int的任何值也將轉換爲Double,所以只檢查轉化爲Double足夠:

extension String { 
    var isnumberordouble: Bool { return Double(self) != nil } 
} 

處理前後空白

上述工程的解決方案,但是如果您的String具有前導空白或尾隨空白,則不是很寬容。處理使用的StringtrimmingCharacters(in:)方法來刪除空格(需要基金會):

import Foundation 

extension String { 
    var isnumberordouble: Bool { return Double(self.trimmingCharacters(in: .whitespaces)) != nil } 
} 

print(" 12 ".isnumberordouble)  // true 
+2

檢查Double可能已經足夠了......表示整數的字符串也應該是有效的double。 –