Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 32

0
votes
answers
25 views
+10

在Firebase中加入兩個節點

1

我正在開發一個應用程序,該應用程序應該顯示來自兩個節點(Firebase)的數據。火力地堡DB的結構爲:在Firebase中加入兩個節點

{ 
    "College": { 
     "4F2EAB65": { 
      "id": "4F2EAB65", 
      "name": "SomeCollege" 
     }, 
     "A3C2ED31": { 
      "id": "A3C2ED31", 
      "name": "OtherCollege" 
     }, 
     "F967B5A0": { 
      "id": "F967B5A0", 
      "name": "CoolCollege" 
     } 
    }, 
    "Student": { 
     "3E20545B": { 
      "college-ID": "4F2EAB65", 
      "id": "3E20545B", 
      "name": "A" 
     }, 
     "6FDEE194": { 
      "college-ID": "F967B5A0", 
      "id": "6FDEE194", 
      "name": "B" 
     } 
    } 

我想有細節,以獲取學生信息:「ID」,「姓名」,「高校-ID」,「高校名稱」(需要獲取「的大學名稱」由「學院ID」)。

我已經在前端使用for循環實現了這個功能。有沒有什麼辦法可以在Firebase服務器上實現這一點,我們是否也可以做一些類似連接(SQL)的事情。

謝謝。

+1

網絡上充滿了Firebase加入的示例和教程。這只是第一個:https://firebase.googleblog.com/2013/10/queries-part-1-common-sql-queries.html –

+0

可以實現索引器的一種方法。 Firebase本身建議使用Algolia進行全文搜索 - https://firebase.google.com/docs/firestore/solutions/search –

沙发
0
0

Firebase實時數據庫中不支持服務器端連接。客戶端連接非常正常。

另一種方法是在寫入時複製數據,以便您不必從兩個位置讀取數據。

對於您的應用程序而言,最好的選擇是個人喜好,您涉及的代碼與數據重複的舒適程度以及您的應用程序的使用情況。

客戶端jons可能不會像您想象的那麼慢。請參閱http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse/35932786#35932786

0
votes
answers
48 views
+10

當我在xcode的任何仿真器上運行程序時,尺寸都很好,但是當我在我自己的iPhone上運行時,按鈕位於不同位置

-2

我正在製作計算器應用程序,無法找出可能導致此問題的原因。我有故事板的動態佈局,我可以在Xcode的任何iPhone版本/ iPad版本上運行我的應用程序,並且所有內容都正確佈置。然而,只要我在我自己的iPhone 5上運行它,按鈕就完全不同了,它們會移動,調整大小並且不再有數字。當我在xcode的任何仿真器上運行程序時,尺寸都很好,但是當我在我自己的iPhone上運行時,按鈕位於不同位置

我很困惑,因爲我甚至試圖在iPhone 5s仿真器上運行與我的iPhone相同的ios並且完美地工作。

有什麼我沒有考慮到這裏嗎?

Layout with constraints in xcode

How it appears on my iPhone 5s

+0

請添加模擬器和設備的屏幕截圖。另外,您可以添加約束條件的故事板屏幕截圖。 – Quver

+0

我添加了屏幕截圖,希望這有助於 –

+0

嗯,你可以嘗試清除模擬器,並從iPhone中刪除應用程序並再次測試。如果您仍然看到差異,我會從劃痕再次創建約束。如果你仍然有問題,你可以給我發故事板,我會盡力幫助你。 – Quver

沙发
0
0

有一些合理的解釋:一個是,你必須在你的佈局兩個many限制不能在同一時間內完成,然後很可能是兩個設備會有不同的表現。檢查調試器輸出中的任何相關消息。

您可能有一些代碼檢查它是在真實設備上運行還是在模擬器上運行(我有一些代碼正在運行,但非常非常罕見)。檢查所有這些代碼。

您可能正在訪問構建機器上的數據,而這些數據在設備上運行代碼時並不存在。

除此之外,我想知道發生了什麼。

0
votes
answers
31 views
+10

基於uview的觸摸,我們可以獲取哪個單元格被觸摸嗎?

0

我想知道是否可以根據觸摸或平移位置獲取觸摸哪個單元格?基於uview的觸摸,我們可以獲取哪個單元格被觸摸嗎?

我可以輕鬆地觸摸,但觸摸視圖(主要是平移位置)我必須反映它背後的集合視圖的變化。

對於觸摸位置我做的簡單平移手勢是這樣的:

@objc func panButton(pan: UIPanGestureRecognizer) { 

     if pan.state == .began { 

     } else if pan.state == .ended || pan.state == .failed || pan.state == .cancelled { 

     } else { 
      let location = pan.location(in: view) 

      } 
     } 
    } 

這可能嗎?怎麼樣 ?或者其他方式?

沙发
0
2

你需要convert從一個視角到另一個視角。

+0

convert(_ point:CGPoint,from view:UIView?)。這一點是觸摸位置和uiview是collectionview? –

+0

@sharadchauhan yep – kirander

+0

@sharadchauhan然後使用indexPathForRowAtPoint和找到觸摸的單元格 – kirander

0
votes
answers
28 views
+10

選擇器找不到實例方法

1

我試圖在我的視圖控制器中註冊一個方法作爲UISwipeGestureRecognizer的操作。目標視圖是我用UIView子類構建的自定義視圖,因爲這是我想要滑動的目標。我遇到的問題是我不知道如何將動作設置爲UIViewController中的方法。當我將手勢拖放到界面構建器中的視圖時,我可以做到這一點,然後將操作拖出到控制器。選擇器找不到實例方法

func swiped(_ sender: UISwipeGestureRecognizer) { 
} 

func addGestureToView(_ view: CardView) { 
    let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:")) 
    gesture.direction = .up 
    view.addGestureRecognizer(gesture) 
} 

我還試圖用

let gesture = UISwipeGestureRecognizer(target: view, action: #selector(swiped(_:)))

這兩種方法給我的以下異常:

終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因:' - [testapp.CardView swiped:]:發送到實例的無法識別的選擇器

我認爲這是因爲它正在尋找CardView目標中的swiped:,而不是控制器中存在的方法。我如何指定我希望它使用Controller作爲動作,同時將手勢本身只有應用於CardView

+0

嗨@Johnathon Sullinger請再次看到我的答案我已更新我的答案,使用需要使用**自**而不是**查看** –

+0

更改讓手勢= UISwipeGestureRecognizer(target:view,action:#selector( (_ :))) 到 let gesture = UISwipeGestureRecognizer(target:self,action:#selector(swiped(_ :))) –

沙发
0
1

改變這一行:

let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:")) 

到:

let gesture = UISwipeGestureRecognizer(target: self, action: #selector(swiped(_:))) 

說明

目標:在UISwipeGestureRecognizer定義了你的操作方法將被調用,通過定義自我,我們告訴我們我們的滑動手勢動作應該被稱爲來回m UIViewcontroller not from CardView

action: in UISwipeGestureRecognizer定義了應該在滑動手勢上調用的方法。

+0

請寫**#選擇器(**,然後使用自動完成類型swiped方法名稱它會寫** **選擇器(swiped(:_))**或**#選擇器(swiped:)** **這是正確的方式 –

+0

已更新我的回答 –

+0

將目標更改爲'self'工作。 t意識到這是選擇器的目標,而不是手勢本身的目標(這是使用'addGestureRecognizer:'設置的。謝謝 –

103
votes
answers
26 views
+10

Array from dictionary keys in swift

Trying to fill an array with strings from the keys in a dictionary in swift.

var componentArray: [String]

let dict = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("Components", ofType: "plist")!)
componentArray = dict.allKeys

This returns an error of: 'AnyObject' not identical to string

Also tried

componentArray = dict.allKeys as String 

but get: 'String' is not convertible to [String]

沙发
+500

使用Swift 3, Dictionary 有一個 keys 屬性。 keys 具有以下聲明:

  var keys:LazyMapCollection< Dictionary< Key,Value>,Key> {get}   

只包含字典鍵的集合。

請注意 LazyMapCollection 可以使用 Array <輕鬆映射到 Array /代碼>' didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?) - &gt; Bool {let string = Bundle.main.path(forResource:“Components”,ofType:“plist”)!如果讓dict = NSDictionary(contentsOfFile:string)為?[String:Int] {let lazyMapCollection = dict.keys讓componentArray = Array(lazyMapCollection)print(componentArray)//打印:[“Car”,“Boat”]} return true}


[String:Int] [String]

以更一般的方式,以下Playground代碼顯示如何獲取使用 keys 的字符串數組( [String]

板凳
+380

Swift中字典鍵的數組

  componentArray = [String](dict.keys) 
     
			
        
地板
+80

dict.allKeys 不是String。它是一個 [String] ,正如錯誤消息告訴你的那樣(當然,假設鍵所有字符串;這正是你在斷言時所斷言的比如說。

所以,首先輸入 componentArray 作為 [AnyObject] ,因為這是在Cocoa API中輸入的方式,或者否則,如果你強制轉換 dict.allKeys ,將其轉換為 [String] ,因為這就是你輸入 componentArray 的方式。

4楼
+30
  extension Array {public func toDictionary&lt; Key:Hashable&gt;(with selectKey:(Element) - &gt; Key) - &gt; [Key:Element] {var dict = [Key:Element]()for self {dict [selectKey(element)] = element} return dict}}  
     
			
        
5楼
+20
屬性。

  let objectDictionary:Dictionary = [“BR” :“Brazil”,“GH”:“Ghana”,“JP”:“Japan”]讓objectArrayOfAllKeys:Array = Array(objectDictionary.keys)讓objectArrayOfAllValues:
     
			
        
6楼
+20
7楼
0

這個答案將用於swift字典w / String鍵。如下所示

 讓dict:[String:Int] = [“hey”:1,“yo”:2,“sup”:3, “你好”:4,“whassup”:5]   

這是我將使用的擴展名。

  extension Dictionary {func allKeys() - &gt ; [String] {guard self.keys.first是String else {debugPrint(“此函數不會返回其他可哈希類型。(僅字符串)”)return []} return self.flatMap {(anEntry) - &gt; 串?在後衛讓temp = anEntry.key為?字符串else {return nil} return temp}}}   

我'

8楼
-20
  //舊版本(歷史記錄)讓keys = dictionary.keys.map {$ 0}讓keys = dictionary?.keys.map {$ 0} ?? [T]()//我們的ducks擴展詞典的更多解釋版本{var allKeys:[Dictionary.Key] {return self.keys.map {$ 0}}}  
     
			
        

與禁用Bitcode相比,啟用Bitcode會使應用程序上安裝的應用程序更小,這並不是一個真實的說法。沒有任何地方可以這麼說。 - user102008 2015年7月7日19:22

@ onmyway133並非所有供應商都提供來源。如果所有供應商提供的是靜態lib和頭文件(或框架),那麼供應商需要在啟用bitcode的情況下編譯他們的東西。 - 杰弗裡·托馬斯2015年8月28日11:19

0
votes
answers
41 views
+10

如何將html表數據解析爲swift中的字符串數組?

0

我正在開發一個iOS應用程序,我需要從swiftsoup庫鏈接中解析html。我已經做了。但它將所有表格數據顯示爲一個字符串。我需要獲取單獨的數據,這些數據應該存儲在單獨的數組中。如何將html表數據解析爲swift中的字符串數組?

下面是表:

 <table width="880" border="1" cellspacing="0" cellpadding="0"> 
     <tr> 
     <td width="81"><strong>Trip Name </strong></td> 
     <td width="159"><div align="center"><strong>Starting Time from Campus </strong></div></td> 
     <td width="186"><div align="center"><strong>Starting Spot &amp; Time </strong></div></td> 
     <td width="444"><strong>Remarks</strong></td> 
     </tr> 
     <tr> 
     <td><div align="center">Normal-1</div></td> 
     <td><div align="center">6:30 AM </div></td> 
     <td>Rupsha, 7:20 AM </td> 
     <td>Will back via Royalmore &amp; Ferighat </td> 
     </tr> 
     <tr> 
     <td><div align="center">Normal-1</div></td> 
     <td><div align="center">6:45 AM </div></td> 
     <td>Moylapota, 7:25 AM </td> 
     <td>Will back via Shibbari - Sonadangha </td> 
     </tr> 


    </table> 

而且我已經做了解析像 線路名稱從校園開始時間開始現貨&時間備註普通-1

的代碼中,我使用的字符串:

let doc: Document = try! SwiftSoup.parse(html) 

for element: Element in try! doc.select("table[width=880]") 
{ 
    let linkText : String = try! element.text(); 
    print(linkText) 
} 

的普通-1,6:30 AM,7:20 AM,通過Royalmore &會支持Ferighat將成爲ST獨立陣列4。

沙发
0
0

我不確定您是要將其存儲爲每行一列還是每列一列。以下是您可以如何將其存儲爲每行一行的樣式。使用map或其他陣列轉換將其轉換加時賽你想要的風格:

var tableContent = [[String]]() 
let document = try! SwiftSoup.parse(html) 
for row in try! document.select("table[width="880"] tr") { 
    var rowContent = [String]() 

    for col in try! row.select("td") { 
     let colContent = try! col.text() 
     rowContent.append(colContent) 
    } 
    tableContent.append(rowContent) 
} 

print(tableContent) 

(如果你這樣做在生產,處理錯誤,而不是正常的所有try!

0
votes
answers
25 views
+10

如何從firestore文檔中檢索密鑰(使用swift 4/ios)

0

在firebase數據庫的firebase文檔中,有關於展開數據庫的信息,並且以消息應用程序爲例。如何從firestore文檔中檢索密鑰(使用swift 4/ios)

https://firebase.google.com/docs/database/web/structure-data

// Conversation members are easily accessible 
    // and stored by chat conversation ID 
    "members": { 
    // we'll talk about indices like this below 
    "one": { 
     "ghopper": true, 
     "alovelace": true, 
     "eclarke": true 
    }, 
    "two": { ... }, 
    "three": { ... } 
    }, 

在「成員」 /「一」的每個鍵是在聊天的參與成員的名稱。我很確定在firebase數據庫中有一個getKey方法來獲取每個密鑰。

我以類似的方式設置了我的數據庫(使用firestore而不是firebase),但每個聊天都是唯一的標識符,文檔包含聊天的成員,其中的密鑰是他們的firebase身份驗證ID。

var docsref: DocumentReference? 
        docsref = self.defaultStore?.colleection("chats").document(chatID) 
        docsref?.getDocument { (document, error) in 

         if let _ = document { 

          print("document!.data()") 


         } else { 
          print("Document does not exist") 
         } 
        } 

當我輸出:

print(document!.data()) 

我得到[「2mHuccccxxxxxxxxxxk4wkIAt33」:1],這是參與聊天成員和一個布爾之一的火力授權碼。

我想獲得該密鑰,但不知道如何。

謝謝。

沙发
0
1

我不確定它是否是確切的語法,但self.defaultStore?.colleection可能是雙E的錯字。也可能是您錯過了一個步驟。你正在進入聊天ID,你期望在成員內部輸出密鑰而不需要實際訪問它。我會訪問成員後.document(chatID)

0
votes
answers
49 views
+10

嘗試將NSLayoutDimension轉換爲CGFloat時出錯

0

我當前正在嘗試將NSLayoutDimension轉換爲CGFloat,以便我可以使我的集合視圖符合特定的佈局。嘗試將NSLayoutDimension轉換爲CGFloat時出錯

let spacing: CGFloat = 3 

    let width = CGFloat(myCollectionView.widthAnchor) 

    let height = CGFloat(myCollectionView.heightAnchor) 


    let itemWidth = width/3 - spacing 
    let itemHeight = height/3 - spacing 

    var itemSize: CGFloat = 0 

    if itemWidth >= itemHeight { 
     itemSize = itemWidth 
    } 
    else if itemHeight > itemWidth { 
     itemSize = itemHeight 
    } 

    let layout = UICollectionViewFlowLayout() 

    layout.sectionInset = UIEdgeInsetsMake(20, 0, 10, 0) 
    layout.itemSize = CGSize(width: itemWidth, height: itemHeight) 

    layout.minimumInteritemSpacing = spacing 
    layout.minimumLineSpacing = spacing 

    myCollectionView.collectionViewLayout = layout 

設定的寬度和高度是給的誤差:

不能調用初始化爲類型「CGFloat的」類型的自變量列表「(NSLayoutDimension)」。

我已經嘗試設置爲一個浮動,然後將浮動轉換爲cgfloat,但那也沒有奏效。

有誰知道如何將NSLayoutDimension轉換爲CGFloat?

任何幫助非常感謝

謝謝。

+0

什麼是你想用自動佈局錨呢? – user28434

沙发
0
3

,如果你希望你的集合視圖的寬度和高度,嘗試下面的代碼:

let width = CGFloat(myCollectionView.frame.width) 

let height = CGFloat(myCollectionView.frame.height) 
0
votes
answers
28 views
+10

添加千位分隔符,自動(SWIFT)

0

我有一個代碼爲我的計算器添加千位分隔符,自動(SWIFT)

我怎麼可以這樣做,當用戶將輸入他將自動空格隔開的數字?

我一直在試圖尋找了很久的答案,但沒有適合它被顯示馬上


gif

var currentInput: Double { 
    get { 
     return Double (displayResultLabel.text!)! 
    } 
    set { 
     let value = "(newValue)" 
     let ValueArray = (value.components(separatedBy:".")) 
     if ValueArray[1] == "0" { 
      displayResultLabel.text = "(ValueArray[0])" 
     } else { 
      displayResultLabel.text = "(newValue)" 
     } 
     stillTyping = false 
    } 
} 
@IBAction func numberPressed(_ sender: UIButton) { 
    let number = sender.currentTitle! 

    if stillTyping { 
     if (displayResultLabel.text?.characters.count)! < 14 { 
      displayResultLabel.text = displayResultLabel.text! + number 
     } 
    } else { 
     displayResultLabel.text = number 
     stillTyping = true 
    } 
} 

然後發生了什麼:

@IBAction func numberPressed(_ sender: UIButton) { 
    let number = sender.currentTitle! 

    if stillTyping { 
     if (displayResultLabel.text?.characters.count)! < 14 { 
      let formatter = NumberFormatter() 
      formatter.numberStyle = .decimal 
      let newNumber = NSNumber(value: Double(displayResultLabel.text! + number)!) 

      displayResultLabel.text = formatter.string(from: newNumber) 
     } 
    } else { 
     displayResultLabel.text = number 
     stillTyping = true 
    } 
} 

錯誤 enter image description here

var stillTyping = false 
var dotIsPlaced = false 
var firstOperand: Double = 0 
var secondOperand: Double = 0 
var operationSign: String = "" 
沙发
0
1

最好將您的值累加到單獨的字符串中,該字符串沒有應用格式化而不是使用文本字段作爲數據模型。然後可格式化十進制和根據需要使用在標籤顯示它一個NumberFormatter:出現

let formatter: NumberFormatter = { 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .decimal 
    return formatter 
}() 

var currentInput: String = "0" { 
    didSet { 
     self.displayResultLabel?.text = self.currentDisplay 
} 

var currentValue: Double { 
    return Double(self.currentInput) ?? 0 
} 

var currentDisplay: String { 
    return formatter.string(from: NSNumber(value:self.currentValue)) ?? "0" 
} 

func addDigit(_ digit: Int) { 
    if currentInput.count < 14 { 
     let newValue = self.currentValue * 10 + Double(digit) 
     self.currentInput = "(newValue)" 
    } 
} 

@IBAction func numberPressed(_ sender: UIButton) { 
    guard let digit = Int(sender.currentTitle!) else { 
     return 
    } 

    self.addDigit(digit) 
} 
板凳
0
1

這是NumberFormatter s爲用於

let formatter = NumberFormatter() 
formatter.numberStyle = .decimal 
if let newNumber = formatter.number(from: displayResultLabel.text! + number){ 
    displayResultLabel.text = formatter.string(from: newNumber) 
} 

注意NumberFormatter走吧兩種方式,你可以(並且可能應該)用它來從分析數字字符串也是

+0

錯誤 - 不能在類型使用實例成員「numberStyle」「的NumberFormatter」 – B2Fq

+0

很抱歉,。我忘了parens來實際實例化它:P現在在我的機器上編譯一個類似的例子 –

+0

他開始輸入8888(它變成888 8)並且出現錯誤 - 「線程1:致命錯誤:意外地發現零,而解包一個可選的「 – B2Fq

0
votes
answers
34 views
+10

如何改變一個UIImage的顏色斯威夫特

1

我在迅速和我想要生成一個函數,它在一個UIImage和的UIColor,並返回一個UIImage重新着色如何改變一個UIImage的顏色斯威夫特

我不工作一個UIImageView,這些只是我打算用作圖標的UIImage。有沒有什麼好的方法來實現這個?

沙发
0
1

您可以使用UIGraphicsBeginImageContextWithOptions開始的圖像內容,設置所需的顏色和用圖像的方法func draw(in rect: CGRect)提醒你圖標圖像使用它的渲染模式.alwaysTemplate

extension UIImage { 
    func tinted(with color: UIColor) -> UIImage? { 
     UIGraphicsBeginImageContextWithOptions(size, false, scale) 
     defer { UIGraphicsEndImageContext() } 
     color.set() 
     withRenderingMode(.alwaysTemplate) 
      .draw(in: CGRect(origin: .zero, size: size)) 
     return UIGraphicsGetImageFromCurrentImageContext() 
    } 
} 

遊樂場測試

與PDF
let camera = UIImage(data: try! Data(contentsOf: URL(string: "https://cdn4.iconfinder.com/data/icons/ionicons/512/icon-camera-128.png")!))! 
let redCmera = camera.tinted(with: .red) 

enter image description here

+1

優秀!謝謝 – TJBlack31

板凳
0
1

如果使用PNG圖像(我想是因爲圖標) - 只需使用:

let originalImage = UIImage(named: "iconName") 
let tintedImage = originalImage?.withRenderingMode(.alwaysTemplate) 
yourButton.setImage(tintedImage, forState: .normal) 
yourButton.tintColor = UIColor.blue //change color of icon 
+1

模板圖像也可以。導入資源時,應該更改資產Catlog中的呈現模式。 –

+0

@derdida謝謝你的回答。這實際上是一個Google地圖標記。我可以使用類似的功能嗎? – TJBlack31

+0

正如我檢查文件,它應該與:GMSMarker.markerImage(與:UIColor.blue)來更改任何顏色的標記圖像 – derdida